diff --git a/lib/annotations-16.0.3.jar b/lib/annotations-16.0.3.jar
new file mode 100644
index 0000000..d6bb55b
Binary files /dev/null and b/lib/annotations-16.0.3.jar differ
diff --git a/lib/commons-io-2.8.0.jar b/lib/commons-io-2.8.0.jar
new file mode 100644
index 0000000..177e58d
Binary files /dev/null and b/lib/commons-io-2.8.0.jar differ
diff --git a/lib/discord-rpc.jar b/lib/discord-rpc.jar
new file mode 100644
index 0000000..ef5c4bb
Binary files /dev/null and b/lib/discord-rpc.jar differ
diff --git a/lib/json-20180813.jar b/lib/json-20180813.jar
new file mode 100644
index 0000000..592f08c
Binary files /dev/null and b/lib/json-20180813.jar differ
diff --git a/lib/json-20180813/co/gongzh/procbridge/Client.class b/lib/json-20180813/co/gongzh/procbridge/Client.class
new file mode 100644
index 0000000..9bec754
Binary files /dev/null and b/lib/json-20180813/co/gongzh/procbridge/Client.class differ
diff --git a/lib/json-20180813/co/gongzh/procbridge/ClientException.class b/lib/json-20180813/co/gongzh/procbridge/ClientException.class
new file mode 100644
index 0000000..c8b6d3e
Binary files /dev/null and b/lib/json-20180813/co/gongzh/procbridge/ClientException.class differ
diff --git a/lib/json-20180813/co/gongzh/procbridge/Delegate.class b/lib/json-20180813/co/gongzh/procbridge/Delegate.class
new file mode 100644
index 0000000..3216f3f
Binary files /dev/null and b/lib/json-20180813/co/gongzh/procbridge/Delegate.class differ
diff --git a/lib/json-20180813/co/gongzh/procbridge/Handler.class b/lib/json-20180813/co/gongzh/procbridge/Handler.class
new file mode 100644
index 0000000..6a0ceae
Binary files /dev/null and b/lib/json-20180813/co/gongzh/procbridge/Handler.class differ
diff --git a/lib/json-20180813/co/gongzh/procbridge/IDelegate.class b/lib/json-20180813/co/gongzh/procbridge/IDelegate.class
new file mode 100644
index 0000000..1b93682
Binary files /dev/null and b/lib/json-20180813/co/gongzh/procbridge/IDelegate.class differ
diff --git a/lib/json-20180813/co/gongzh/procbridge/Keys.class b/lib/json-20180813/co/gongzh/procbridge/Keys.class
new file mode 100644
index 0000000..1ffdc86
Binary files /dev/null and b/lib/json-20180813/co/gongzh/procbridge/Keys.class differ
diff --git a/lib/json-20180813/co/gongzh/procbridge/Protocol.class b/lib/json-20180813/co/gongzh/procbridge/Protocol.class
new file mode 100644
index 0000000..1ef1405
Binary files /dev/null and b/lib/json-20180813/co/gongzh/procbridge/Protocol.class differ
diff --git a/lib/json-20180813/co/gongzh/procbridge/ProtocolException.class b/lib/json-20180813/co/gongzh/procbridge/ProtocolException.class
new file mode 100644
index 0000000..f0f84fc
Binary files /dev/null and b/lib/json-20180813/co/gongzh/procbridge/ProtocolException.class differ
diff --git a/lib/json-20180813/co/gongzh/procbridge/Server$Connection.class b/lib/json-20180813/co/gongzh/procbridge/Server$Connection.class
new file mode 100644
index 0000000..18d2e75
Binary files /dev/null and b/lib/json-20180813/co/gongzh/procbridge/Server$Connection.class differ
diff --git a/lib/json-20180813/co/gongzh/procbridge/Server.class b/lib/json-20180813/co/gongzh/procbridge/Server.class
new file mode 100644
index 0000000..3f403f8
Binary files /dev/null and b/lib/json-20180813/co/gongzh/procbridge/Server.class differ
diff --git a/lib/json-20180813/co/gongzh/procbridge/ServerException.class b/lib/json-20180813/co/gongzh/procbridge/ServerException.class
new file mode 100644
index 0000000..5e9a388
Binary files /dev/null and b/lib/json-20180813/co/gongzh/procbridge/ServerException.class differ
diff --git a/lib/json-20180813/co/gongzh/procbridge/StatusCode.class b/lib/json-20180813/co/gongzh/procbridge/StatusCode.class
new file mode 100644
index 0000000..bb946d7
Binary files /dev/null and b/lib/json-20180813/co/gongzh/procbridge/StatusCode.class differ
diff --git a/lib/json-20180813/co/gongzh/procbridge/TimeoutException.class b/lib/json-20180813/co/gongzh/procbridge/TimeoutException.class
new file mode 100644
index 0000000..8dd1e89
Binary files /dev/null and b/lib/json-20180813/co/gongzh/procbridge/TimeoutException.class differ
diff --git a/lib/json-20180813/co/gongzh/procbridge/TimeoutExecutor$1.class b/lib/json-20180813/co/gongzh/procbridge/TimeoutExecutor$1.class
new file mode 100644
index 0000000..c279666
Binary files /dev/null and b/lib/json-20180813/co/gongzh/procbridge/TimeoutExecutor$1.class differ
diff --git a/lib/json-20180813/co/gongzh/procbridge/TimeoutExecutor.class b/lib/json-20180813/co/gongzh/procbridge/TimeoutExecutor.class
new file mode 100644
index 0000000..b7df0c3
Binary files /dev/null and b/lib/json-20180813/co/gongzh/procbridge/TimeoutExecutor.class differ
diff --git a/lib/json-20180813/co/gongzh/procbridge/Versions.class b/lib/json-20180813/co/gongzh/procbridge/Versions.class
new file mode 100644
index 0000000..7b4faa3
Binary files /dev/null and b/lib/json-20180813/co/gongzh/procbridge/Versions.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/base/AnimatedToggleable$1.class b/lib/json-20180813/com/lukflug/panelstudio/base/AnimatedToggleable$1.class
new file mode 100644
index 0000000..3e32296
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/base/AnimatedToggleable$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/base/AnimatedToggleable.class b/lib/json-20180813/com/lukflug/panelstudio/base/AnimatedToggleable.class
new file mode 100644
index 0000000..bca8c13
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/base/AnimatedToggleable.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/base/Animation.class b/lib/json-20180813/com/lukflug/panelstudio/base/Animation.class
new file mode 100644
index 0000000..6b9d8fe
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/base/Animation.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/base/ConstantToggleable.class b/lib/json-20180813/com/lukflug/panelstudio/base/ConstantToggleable.class
new file mode 100644
index 0000000..3de660d
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/base/ConstantToggleable.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/base/Context.class b/lib/json-20180813/com/lukflug/panelstudio/base/Context.class
new file mode 100644
index 0000000..f125a26
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/base/Context.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/base/Description.class b/lib/json-20180813/com/lukflug/panelstudio/base/Description.class
new file mode 100644
index 0000000..83958c4
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/base/Description.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/base/IBoolean.class b/lib/json-20180813/com/lukflug/panelstudio/base/IBoolean.class
new file mode 100644
index 0000000..2b8c36c
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/base/IBoolean.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/base/IInterface.class b/lib/json-20180813/com/lukflug/panelstudio/base/IInterface.class
new file mode 100644
index 0000000..76d0f8a
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/base/IInterface.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/base/IToggleable.class b/lib/json-20180813/com/lukflug/panelstudio/base/IToggleable.class
new file mode 100644
index 0000000..f50525b
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/base/IToggleable.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/base/SettingsAnimation.class b/lib/json-20180813/com/lukflug/panelstudio/base/SettingsAnimation.class
new file mode 100644
index 0000000..642fe59
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/base/SettingsAnimation.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/base/SimpleToggleable.class b/lib/json-20180813/com/lukflug/panelstudio/base/SimpleToggleable.class
new file mode 100644
index 0000000..7b34f9f
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/base/SimpleToggleable.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/CollapsibleComponent.class b/lib/json-20180813/com/lukflug/panelstudio/component/CollapsibleComponent.class
new file mode 100644
index 0000000..53360e3
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/CollapsibleComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/ComponentBase.class b/lib/json-20180813/com/lukflug/panelstudio/component/ComponentBase.class
new file mode 100644
index 0000000..2d07080
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/ComponentBase.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/ComponentProxy.class b/lib/json-20180813/com/lukflug/panelstudio/component/ComponentProxy.class
new file mode 100644
index 0000000..fd15da4
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/ComponentProxy.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/DraggableComponent$1.class b/lib/json-20180813/com/lukflug/panelstudio/component/DraggableComponent$1.class
new file mode 100644
index 0000000..73613c8
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/DraggableComponent$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/DraggableComponent.class b/lib/json-20180813/com/lukflug/panelstudio/component/DraggableComponent.class
new file mode 100644
index 0000000..e6d3e44
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/DraggableComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/FixedComponent.class b/lib/json-20180813/com/lukflug/panelstudio/component/FixedComponent.class
new file mode 100644
index 0000000..6c1b165
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/FixedComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/FocusableComponent.class b/lib/json-20180813/com/lukflug/panelstudio/component/FocusableComponent.class
new file mode 100644
index 0000000..a0e27f8
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/FocusableComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/FocusableComponentProxy.class b/lib/json-20180813/com/lukflug/panelstudio/component/FocusableComponentProxy.class
new file mode 100644
index 0000000..a36f0fb
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/FocusableComponentProxy.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/HorizontalComponent.class b/lib/json-20180813/com/lukflug/panelstudio/component/HorizontalComponent.class
new file mode 100644
index 0000000..388daf6
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/HorizontalComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/IComponent.class b/lib/json-20180813/com/lukflug/panelstudio/component/IComponent.class
new file mode 100644
index 0000000..b666d9b
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/IComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/IComponentProxy.class b/lib/json-20180813/com/lukflug/panelstudio/component/IComponentProxy.class
new file mode 100644
index 0000000..f767fba
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/IComponentProxy.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/IFixedComponent.class b/lib/json-20180813/com/lukflug/panelstudio/component/IFixedComponent.class
new file mode 100644
index 0000000..e5da6e8
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/IFixedComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/IFixedComponentProxy.class b/lib/json-20180813/com/lukflug/panelstudio/component/IFixedComponentProxy.class
new file mode 100644
index 0000000..a4c44ce
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/IFixedComponentProxy.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/IHorizontalComponent.class b/lib/json-20180813/com/lukflug/panelstudio/component/IHorizontalComponent.class
new file mode 100644
index 0000000..ecfb557
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/IHorizontalComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/IHorizontalComponentProxy.class b/lib/json-20180813/com/lukflug/panelstudio/component/IHorizontalComponentProxy.class
new file mode 100644
index 0000000..5ad2891
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/IHorizontalComponentProxy.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/IResizable.class b/lib/json-20180813/com/lukflug/panelstudio/component/IResizable.class
new file mode 100644
index 0000000..a894baf
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/IResizable.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/IScrollSize.class b/lib/json-20180813/com/lukflug/panelstudio/component/IScrollSize.class
new file mode 100644
index 0000000..b1342bb
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/IScrollSize.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/PopupComponent.class b/lib/json-20180813/com/lukflug/panelstudio/component/PopupComponent.class
new file mode 100644
index 0000000..86c81cc
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/PopupComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/component/ScrollableComponent.class b/lib/json-20180813/com/lukflug/panelstudio/component/ScrollableComponent.class
new file mode 100644
index 0000000..f4dfa65
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/component/ScrollableComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/config/IConfigList.class b/lib/json-20180813/com/lukflug/panelstudio/config/IConfigList.class
new file mode 100644
index 0000000..1f23723
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/config/IConfigList.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/config/IPanelConfig.class b/lib/json-20180813/com/lukflug/panelstudio/config/IPanelConfig.class
new file mode 100644
index 0000000..8ba1370
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/config/IPanelConfig.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/container/Container$ComponentState.class b/lib/json-20180813/com/lukflug/panelstudio/container/Container$ComponentState.class
new file mode 100644
index 0000000..3f531a7
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/container/Container$ComponentState.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/container/Container$ContextSensitiveConsumer.class b/lib/json-20180813/com/lukflug/panelstudio/container/Container$ContextSensitiveConsumer.class
new file mode 100644
index 0000000..f0b6f00
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/container/Container$ContextSensitiveConsumer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/container/Container.class b/lib/json-20180813/com/lukflug/panelstudio/container/Container.class
new file mode 100644
index 0000000..343b71b
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/container/Container.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/container/FixedContainer$PopupPair.class b/lib/json-20180813/com/lukflug/panelstudio/container/FixedContainer$PopupPair.class
new file mode 100644
index 0000000..132ed38
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/container/FixedContainer$PopupPair.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/container/FixedContainer.class b/lib/json-20180813/com/lukflug/panelstudio/container/FixedContainer.class
new file mode 100644
index 0000000..1aa9341
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/container/FixedContainer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/container/GUI.class b/lib/json-20180813/com/lukflug/panelstudio/container/GUI.class
new file mode 100644
index 0000000..b2dcbdb
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/container/GUI.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/container/HorizontalContainer.class b/lib/json-20180813/com/lukflug/panelstudio/container/HorizontalContainer.class
new file mode 100644
index 0000000..b3eaa26
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/container/HorizontalContainer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/container/IContainer.class b/lib/json-20180813/com/lukflug/panelstudio/container/IContainer.class
new file mode 100644
index 0000000..01c1e74
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/container/IContainer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/container/VerticalContainer.class b/lib/json-20180813/com/lukflug/panelstudio/container/VerticalContainer.class
new file mode 100644
index 0000000..205afe5
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/container/VerticalContainer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/hud/HUDComponent.class b/lib/json-20180813/com/lukflug/panelstudio/hud/HUDComponent.class
new file mode 100644
index 0000000..f88293f
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/hud/HUDComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/hud/HUDGUI.class b/lib/json-20180813/com/lukflug/panelstudio/hud/HUDGUI.class
new file mode 100644
index 0000000..9beddda
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/hud/HUDGUI.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/hud/HUDList.class b/lib/json-20180813/com/lukflug/panelstudio/hud/HUDList.class
new file mode 100644
index 0000000..923111f
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/hud/HUDList.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/hud/HUDPanel$HUDPanelComponent$1.class b/lib/json-20180813/com/lukflug/panelstudio/hud/HUDPanel$HUDPanelComponent$1.class
new file mode 100644
index 0000000..af283ea
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/hud/HUDPanel$HUDPanelComponent$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/hud/HUDPanel$HUDPanelComponent$2.class b/lib/json-20180813/com/lukflug/panelstudio/hud/HUDPanel$HUDPanelComponent$2.class
new file mode 100644
index 0000000..ef907a9
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/hud/HUDPanel$HUDPanelComponent$2.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/hud/HUDPanel$HUDPanelComponent$3.class b/lib/json-20180813/com/lukflug/panelstudio/hud/HUDPanel$HUDPanelComponent$3.class
new file mode 100644
index 0000000..0e10fdc
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/hud/HUDPanel$HUDPanelComponent$3.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/hud/HUDPanel$HUDPanelComponent$4.class b/lib/json-20180813/com/lukflug/panelstudio/hud/HUDPanel$HUDPanelComponent$4.class
new file mode 100644
index 0000000..8679464
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/hud/HUDPanel$HUDPanelComponent$4.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/hud/HUDPanel$HUDPanelComponent.class b/lib/json-20180813/com/lukflug/panelstudio/hud/HUDPanel$HUDPanelComponent.class
new file mode 100644
index 0000000..b79a433
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/hud/HUDPanel$HUDPanelComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/hud/HUDPanel.class b/lib/json-20180813/com/lukflug/panelstudio/hud/HUDPanel.class
new file mode 100644
index 0000000..adf56d0
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/hud/HUDPanel.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/hud/ListComponent.class b/lib/json-20180813/com/lukflug/panelstudio/hud/ListComponent.class
new file mode 100644
index 0000000..f0c5ae1
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/hud/ListComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/CSGOLayout$1.class b/lib/json-20180813/com/lukflug/panelstudio/layout/CSGOLayout$1.class
new file mode 100644
index 0000000..3c132eb
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/CSGOLayout$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/CSGOLayout$2.class b/lib/json-20180813/com/lukflug/panelstudio/layout/CSGOLayout$2.class
new file mode 100644
index 0000000..825a185
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/CSGOLayout$2.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/CSGOLayout$3.class b/lib/json-20180813/com/lukflug/panelstudio/layout/CSGOLayout$3.class
new file mode 100644
index 0000000..6fdea21
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/CSGOLayout$3.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/CSGOLayout$4.class b/lib/json-20180813/com/lukflug/panelstudio/layout/CSGOLayout$4.class
new file mode 100644
index 0000000..dd6056b
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/CSGOLayout$4.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/CSGOLayout.class b/lib/json-20180813/com/lukflug/panelstudio/layout/CSGOLayout.class
new file mode 100644
index 0000000..fc47722
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/CSGOLayout.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/ChildUtil$1.class b/lib/json-20180813/com/lukflug/panelstudio/layout/ChildUtil$1.class
new file mode 100644
index 0000000..753a2fc
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/ChildUtil$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/ChildUtil$2.class b/lib/json-20180813/com/lukflug/panelstudio/layout/ChildUtil$2.class
new file mode 100644
index 0000000..ad4aa15
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/ChildUtil$2.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/ChildUtil$ChildMode.class b/lib/json-20180813/com/lukflug/panelstudio/layout/ChildUtil$ChildMode.class
new file mode 100644
index 0000000..21ebe5c
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/ChildUtil$ChildMode.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/ChildUtil.class b/lib/json-20180813/com/lukflug/panelstudio/layout/ChildUtil.class
new file mode 100644
index 0000000..f384297
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/ChildUtil.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/ComponentGenerator$1.class b/lib/json-20180813/com/lukflug/panelstudio/layout/ComponentGenerator$1.class
new file mode 100644
index 0000000..ba52b2c
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/ComponentGenerator$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/ComponentGenerator$2.class b/lib/json-20180813/com/lukflug/panelstudio/layout/ComponentGenerator$2.class
new file mode 100644
index 0000000..fdc50ce
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/ComponentGenerator$2.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/ComponentGenerator.class b/lib/json-20180813/com/lukflug/panelstudio/layout/ComponentGenerator.class
new file mode 100644
index 0000000..653a34e
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/ComponentGenerator.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/IComponentAdder.class b/lib/json-20180813/com/lukflug/panelstudio/layout/IComponentAdder.class
new file mode 100644
index 0000000..253dfe8
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/IComponentAdder.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/IComponentGenerator$1.class b/lib/json-20180813/com/lukflug/panelstudio/layout/IComponentGenerator$1.class
new file mode 100644
index 0000000..a0ae239
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/IComponentGenerator$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/IComponentGenerator$2.class b/lib/json-20180813/com/lukflug/panelstudio/layout/IComponentGenerator$2.class
new file mode 100644
index 0000000..c821d46
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/IComponentGenerator$2.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/IComponentGenerator.class b/lib/json-20180813/com/lukflug/panelstudio/layout/IComponentGenerator.class
new file mode 100644
index 0000000..bb67392
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/IComponentGenerator.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/ILayout.class b/lib/json-20180813/com/lukflug/panelstudio/layout/ILayout.class
new file mode 100644
index 0000000..e6989bc
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/ILayout.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/PanelAdder$1.class b/lib/json-20180813/com/lukflug/panelstudio/layout/PanelAdder$1.class
new file mode 100644
index 0000000..3b1119f
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/PanelAdder$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/PanelAdder.class b/lib/json-20180813/com/lukflug/panelstudio/layout/PanelAdder.class
new file mode 100644
index 0000000..0560d8c
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/PanelAdder.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/PanelLayout.class b/lib/json-20180813/com/lukflug/panelstudio/layout/PanelLayout.class
new file mode 100644
index 0000000..da10101
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/PanelLayout.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/SearchableLayout$1.class b/lib/json-20180813/com/lukflug/panelstudio/layout/SearchableLayout$1.class
new file mode 100644
index 0000000..d6e2b6e
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/SearchableLayout$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/SearchableLayout$2.class b/lib/json-20180813/com/lukflug/panelstudio/layout/SearchableLayout$2.class
new file mode 100644
index 0000000..b3fc5a2
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/SearchableLayout$2.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/SearchableLayout$3.class b/lib/json-20180813/com/lukflug/panelstudio/layout/SearchableLayout$3.class
new file mode 100644
index 0000000..7f8efbe
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/SearchableLayout$3.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/SearchableLayout$4.class b/lib/json-20180813/com/lukflug/panelstudio/layout/SearchableLayout$4.class
new file mode 100644
index 0000000..c567926
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/SearchableLayout$4.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/SearchableLayout.class b/lib/json-20180813/com/lukflug/panelstudio/layout/SearchableLayout.class
new file mode 100644
index 0000000..ed9cc47
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/SearchableLayout.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/SinglePanelAdder$1.class b/lib/json-20180813/com/lukflug/panelstudio/layout/SinglePanelAdder$1.class
new file mode 100644
index 0000000..be48cc0
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/SinglePanelAdder$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/SinglePanelAdder$2.class b/lib/json-20180813/com/lukflug/panelstudio/layout/SinglePanelAdder$2.class
new file mode 100644
index 0000000..daddc7a
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/SinglePanelAdder$2.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/SinglePanelAdder$3.class b/lib/json-20180813/com/lukflug/panelstudio/layout/SinglePanelAdder$3.class
new file mode 100644
index 0000000..5876736
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/SinglePanelAdder$3.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/SinglePanelAdder.class b/lib/json-20180813/com/lukflug/panelstudio/layout/SinglePanelAdder.class
new file mode 100644
index 0000000..6f95a89
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/SinglePanelAdder.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/StackedPanelAdder$1.class b/lib/json-20180813/com/lukflug/panelstudio/layout/StackedPanelAdder$1.class
new file mode 100644
index 0000000..346c27f
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/StackedPanelAdder$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/layout/StackedPanelAdder.class b/lib/json-20180813/com/lukflug/panelstudio/layout/StackedPanelAdder.class
new file mode 100644
index 0000000..1cb2ac2
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/layout/StackedPanelAdder.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/popup/CenteredPositioner.class b/lib/json-20180813/com/lukflug/panelstudio/popup/CenteredPositioner.class
new file mode 100644
index 0000000..89ab4f2
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/popup/CenteredPositioner.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/popup/FixedPositioner.class b/lib/json-20180813/com/lukflug/panelstudio/popup/FixedPositioner.class
new file mode 100644
index 0000000..bf021b6
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/popup/FixedPositioner.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/popup/IPopup.class b/lib/json-20180813/com/lukflug/panelstudio/popup/IPopup.class
new file mode 100644
index 0000000..d5c5596
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/popup/IPopup.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/popup/IPopupDisplayer.class b/lib/json-20180813/com/lukflug/panelstudio/popup/IPopupDisplayer.class
new file mode 100644
index 0000000..45d4887
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/popup/IPopupDisplayer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/popup/IPopupPositioner.class b/lib/json-20180813/com/lukflug/panelstudio/popup/IPopupPositioner.class
new file mode 100644
index 0000000..8016c0d
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/popup/IPopupPositioner.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/popup/MousePositioner.class b/lib/json-20180813/com/lukflug/panelstudio/popup/MousePositioner.class
new file mode 100644
index 0000000..39bc51a
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/popup/MousePositioner.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/popup/PanelPositioner.class b/lib/json-20180813/com/lukflug/panelstudio/popup/PanelPositioner.class
new file mode 100644
index 0000000..625f6ba
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/popup/PanelPositioner.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/popup/PopupTuple.class b/lib/json-20180813/com/lukflug/panelstudio/popup/PopupTuple.class
new file mode 100644
index 0000000..d35bc3f
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/popup/PopupTuple.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/setting/AnimatedEnum.class b/lib/json-20180813/com/lukflug/panelstudio/setting/AnimatedEnum.class
new file mode 100644
index 0000000..906f2c2
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/setting/AnimatedEnum.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/setting/IBooleanSetting.class b/lib/json-20180813/com/lukflug/panelstudio/setting/IBooleanSetting.class
new file mode 100644
index 0000000..fc3ac99
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/setting/IBooleanSetting.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/setting/ICategory.class b/lib/json-20180813/com/lukflug/panelstudio/setting/ICategory.class
new file mode 100644
index 0000000..cfcfeca
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/setting/ICategory.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/setting/IClient.class b/lib/json-20180813/com/lukflug/panelstudio/setting/IClient.class
new file mode 100644
index 0000000..5987bb8
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/setting/IClient.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/setting/IColorSetting.class b/lib/json-20180813/com/lukflug/panelstudio/setting/IColorSetting.class
new file mode 100644
index 0000000..76e36cb
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/setting/IColorSetting.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/setting/IEnumSetting.class b/lib/json-20180813/com/lukflug/panelstudio/setting/IEnumSetting.class
new file mode 100644
index 0000000..b16819e
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/setting/IEnumSetting.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/setting/IKeybindSetting.class b/lib/json-20180813/com/lukflug/panelstudio/setting/IKeybindSetting.class
new file mode 100644
index 0000000..6746b26
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/setting/IKeybindSetting.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/setting/ILabeled.class b/lib/json-20180813/com/lukflug/panelstudio/setting/ILabeled.class
new file mode 100644
index 0000000..b41fe1a
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/setting/ILabeled.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/setting/IModule.class b/lib/json-20180813/com/lukflug/panelstudio/setting/IModule.class
new file mode 100644
index 0000000..4f4f60d
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/setting/IModule.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/setting/INumberSetting.class b/lib/json-20180813/com/lukflug/panelstudio/setting/INumberSetting.class
new file mode 100644
index 0000000..01206bc
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/setting/INumberSetting.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/setting/ISetting.class b/lib/json-20180813/com/lukflug/panelstudio/setting/ISetting.class
new file mode 100644
index 0000000..d44a9cc
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/setting/ISetting.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/setting/IStringSetting.class b/lib/json-20180813/com/lukflug/panelstudio/setting/IStringSetting.class
new file mode 100644
index 0000000..10cb60b
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/setting/IStringSetting.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/setting/Labeled.class b/lib/json-20180813/com/lukflug/panelstudio/setting/Labeled.class
new file mode 100644
index 0000000..e9c7f2a
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/setting/Labeled.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/tabgui/ITabGUIRenderer.class b/lib/json-20180813/com/lukflug/panelstudio/tabgui/ITabGUIRenderer.class
new file mode 100644
index 0000000..0e3cc59
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/tabgui/ITabGUIRenderer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/tabgui/ITabGUITheme.class b/lib/json-20180813/com/lukflug/panelstudio/tabgui/ITabGUITheme.class
new file mode 100644
index 0000000..1557ca1
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/tabgui/ITabGUITheme.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/tabgui/StandardTheme$1.class b/lib/json-20180813/com/lukflug/panelstudio/tabgui/StandardTheme$1.class
new file mode 100644
index 0000000..be150ef
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/tabgui/StandardTheme$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/tabgui/StandardTheme$2.class b/lib/json-20180813/com/lukflug/panelstudio/tabgui/StandardTheme$2.class
new file mode 100644
index 0000000..a50c20a
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/tabgui/StandardTheme$2.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/tabgui/StandardTheme$RendererBase.class b/lib/json-20180813/com/lukflug/panelstudio/tabgui/StandardTheme$RendererBase.class
new file mode 100644
index 0000000..bb27991
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/tabgui/StandardTheme$RendererBase.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/tabgui/StandardTheme.class b/lib/json-20180813/com/lukflug/panelstudio/tabgui/StandardTheme.class
new file mode 100644
index 0000000..d3c79ce
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/tabgui/StandardTheme.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/tabgui/Tab.class b/lib/json-20180813/com/lukflug/panelstudio/tabgui/Tab.class
new file mode 100644
index 0000000..9fb9436
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/tabgui/Tab.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/tabgui/TabGUI$ChildTab$1.class b/lib/json-20180813/com/lukflug/panelstudio/tabgui/TabGUI$ChildTab$1.class
new file mode 100644
index 0000000..fc8727d
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/tabgui/TabGUI$ChildTab$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/tabgui/TabGUI$ChildTab.class b/lib/json-20180813/com/lukflug/panelstudio/tabgui/TabGUI$ChildTab.class
new file mode 100644
index 0000000..050a691
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/tabgui/TabGUI$ChildTab.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/tabgui/TabGUI.class b/lib/json-20180813/com/lukflug/panelstudio/tabgui/TabGUI.class
new file mode 100644
index 0000000..adbad6d
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/tabgui/TabGUI.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/tabgui/TabItem$ContentItem.class b/lib/json-20180813/com/lukflug/panelstudio/tabgui/TabItem$ContentItem.class
new file mode 100644
index 0000000..3516497
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/tabgui/TabItem$ContentItem.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/tabgui/TabItem.class b/lib/json-20180813/com/lukflug/panelstudio/tabgui/TabItem.class
new file mode 100644
index 0000000..9f0b3c9
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/tabgui/TabItem.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$1.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$1.class
new file mode 100644
index 0000000..532a252
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$10.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$10.class
new file mode 100644
index 0000000..5014bda
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$10.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$11.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$11.class
new file mode 100644
index 0000000..48a5239
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$11.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$12.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$12.class
new file mode 100644
index 0000000..3cc63aa
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$12.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$13.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$13.class
new file mode 100644
index 0000000..152fc68
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$13.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$14.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$14.class
new file mode 100644
index 0000000..4d00126
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$14.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$15.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$15.class
new file mode 100644
index 0000000..a741705
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$15.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$2.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$2.class
new file mode 100644
index 0000000..a35cece
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$2.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$3.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$3.class
new file mode 100644
index 0000000..a56d9a0
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$3.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$4.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$4.class
new file mode 100644
index 0000000..dbadb61
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$4.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$5.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$5.class
new file mode 100644
index 0000000..8865b8d
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$5.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$6.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$6.class
new file mode 100644
index 0000000..2bac00d
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$6.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$7.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$7.class
new file mode 100644
index 0000000..549c74a
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$7.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$8.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$8.class
new file mode 100644
index 0000000..b396221
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$8.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$9.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$9.class
new file mode 100644
index 0000000..2b05e66
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme$9.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme.class
new file mode 100644
index 0000000..10edbb4
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ClearTheme.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$1.class b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$1.class
new file mode 100644
index 0000000..350017d
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$10.class b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$10.class
new file mode 100644
index 0000000..5b3cded
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$10.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$11.class b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$11.class
new file mode 100644
index 0000000..a00e7e7
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$11.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$12.class b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$12.class
new file mode 100644
index 0000000..8d485ca
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$12.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$13.class b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$13.class
new file mode 100644
index 0000000..5a92763
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$13.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$14.class b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$14.class
new file mode 100644
index 0000000..367b879
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$14.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$2.class b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$2.class
new file mode 100644
index 0000000..526f1d0
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$2.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$3.class b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$3.class
new file mode 100644
index 0000000..36f4bd8
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$3.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$4.class b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$4.class
new file mode 100644
index 0000000..3f4ceab
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$4.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$5.class b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$5.class
new file mode 100644
index 0000000..a74f869
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$5.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$6.class b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$6.class
new file mode 100644
index 0000000..989867c
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$6.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$7.class b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$7.class
new file mode 100644
index 0000000..c2cf292
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$7.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$8.class b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$8.class
new file mode 100644
index 0000000..f750c4f
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$8.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$9.class b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$9.class
new file mode 100644
index 0000000..e0bad52
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme$9.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme.class b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme.class
new file mode 100644
index 0000000..75c1860
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/GameSenseTheme.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IButtonRenderer.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IButtonRenderer.class
new file mode 100644
index 0000000..4b89962
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IButtonRenderer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IButtonRendererProxy.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IButtonRendererProxy.class
new file mode 100644
index 0000000..e64c21c
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IButtonRendererProxy.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IColorPickerRenderer.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IColorPickerRenderer.class
new file mode 100644
index 0000000..4be7c66
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IColorPickerRenderer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IColorPickerRendererProxy.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IColorPickerRendererProxy.class
new file mode 100644
index 0000000..50c1f63
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IColorPickerRendererProxy.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IColorScheme.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IColorScheme.class
new file mode 100644
index 0000000..46088ac
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IColorScheme.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IContainerRenderer.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IContainerRenderer.class
new file mode 100644
index 0000000..85a2bb2
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IContainerRenderer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IContainerRendererProxy.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IContainerRendererProxy.class
new file mode 100644
index 0000000..8b145e8
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IContainerRendererProxy.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IDescriptionRenderer.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IDescriptionRenderer.class
new file mode 100644
index 0000000..372adf7
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IDescriptionRenderer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IDescriptionRendererProxy.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IDescriptionRendererProxy.class
new file mode 100644
index 0000000..7e5edf8
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IDescriptionRendererProxy.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IEmptySpaceRenderer.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IEmptySpaceRenderer.class
new file mode 100644
index 0000000..2847860
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IEmptySpaceRenderer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IEmptySpaceRendererProxy.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IEmptySpaceRendererProxy.class
new file mode 100644
index 0000000..15e27fe
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IEmptySpaceRendererProxy.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IPanelRenderer.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IPanelRenderer.class
new file mode 100644
index 0000000..dfc0182
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IPanelRenderer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IPanelRendererProxy.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IPanelRendererProxy.class
new file mode 100644
index 0000000..ef1d644
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IPanelRendererProxy.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IRadioRenderer.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IRadioRenderer.class
new file mode 100644
index 0000000..aab376b
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IRadioRenderer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IRadioRendererProxy.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IRadioRendererProxy.class
new file mode 100644
index 0000000..88ee946
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IRadioRendererProxy.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IResizeBorderRenderer.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IResizeBorderRenderer.class
new file mode 100644
index 0000000..f94ccb5
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IResizeBorderRenderer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IResizeBorderRendererProxy.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IResizeBorderRendererProxy.class
new file mode 100644
index 0000000..7e9fbc6
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IResizeBorderRendererProxy.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IScrollBarRenderer.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IScrollBarRenderer.class
new file mode 100644
index 0000000..8e1c6cd
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IScrollBarRenderer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IScrollBarRendererProxy.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IScrollBarRendererProxy.class
new file mode 100644
index 0000000..8cfe099
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IScrollBarRendererProxy.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ISliderRenderer.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ISliderRenderer.class
new file mode 100644
index 0000000..5949a40
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ISliderRenderer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ISliderRendererProxy.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ISliderRendererProxy.class
new file mode 100644
index 0000000..2948b47
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ISliderRendererProxy.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ISwitchRenderer.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ISwitchRenderer.class
new file mode 100644
index 0000000..b931685
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ISwitchRenderer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ISwitchRendererProxy.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ISwitchRendererProxy.class
new file mode 100644
index 0000000..dbff29a
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ISwitchRendererProxy.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ITextFieldRenderer.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ITextFieldRenderer.class
new file mode 100644
index 0000000..173d177
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ITextFieldRenderer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ITextFieldRendererProxy.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ITextFieldRendererProxy.class
new file mode 100644
index 0000000..1f0ce7f
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ITextFieldRendererProxy.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ITheme.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ITheme.class
new file mode 100644
index 0000000..6229c62
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ITheme.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/IThemeMultiplexer.class b/lib/json-20180813/com/lukflug/panelstudio/theme/IThemeMultiplexer.class
new file mode 100644
index 0000000..41f236f
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/IThemeMultiplexer.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$1.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$1.class
new file mode 100644
index 0000000..5d16e69
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$10.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$10.class
new file mode 100644
index 0000000..ae119bb
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$10.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$11.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$11.class
new file mode 100644
index 0000000..a527da1
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$11.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$12.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$12.class
new file mode 100644
index 0000000..f721357
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$12.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$13.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$13.class
new file mode 100644
index 0000000..75360dc
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$13.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$14.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$14.class
new file mode 100644
index 0000000..0eae8ab
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$14.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$15.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$15.class
new file mode 100644
index 0000000..6de9981
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$15.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$2.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$2.class
new file mode 100644
index 0000000..97a006e
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$2.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$3.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$3.class
new file mode 100644
index 0000000..3b6645d
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$3.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$4.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$4.class
new file mode 100644
index 0000000..8d4a6de
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$4.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$5.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$5.class
new file mode 100644
index 0000000..d338493
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$5.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$6.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$6.class
new file mode 100644
index 0000000..aaf9d21
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$6.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$7.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$7.class
new file mode 100644
index 0000000..e5456dc
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$7.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$8.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$8.class
new file mode 100644
index 0000000..3ee5be5
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$8.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$9.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$9.class
new file mode 100644
index 0000000..dd23f9c
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme$9.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme.class
new file mode 100644
index 0000000..c944fa0
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ImpactTheme.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/OptimizedTheme$ParameterTuple.class b/lib/json-20180813/com/lukflug/panelstudio/theme/OptimizedTheme$ParameterTuple.class
new file mode 100644
index 0000000..f9f825a
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/OptimizedTheme$ParameterTuple.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/OptimizedTheme.class b/lib/json-20180813/com/lukflug/panelstudio/theme/OptimizedTheme.class
new file mode 100644
index 0000000..5c5b076
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/OptimizedTheme.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$1.class b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$1.class
new file mode 100644
index 0000000..2448240
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$10.class b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$10.class
new file mode 100644
index 0000000..64b5b1b
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$10.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$11.class b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$11.class
new file mode 100644
index 0000000..f99d180
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$11.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$12.class b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$12.class
new file mode 100644
index 0000000..d92a27e
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$12.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$13.class b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$13.class
new file mode 100644
index 0000000..69fb229
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$13.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$14.class b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$14.class
new file mode 100644
index 0000000..2d2e19c
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$14.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$15.class b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$15.class
new file mode 100644
index 0000000..15b694f
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$15.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$2.class b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$2.class
new file mode 100644
index 0000000..700dee7
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$2.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$3.class b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$3.class
new file mode 100644
index 0000000..080b433
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$3.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$4.class b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$4.class
new file mode 100644
index 0000000..17dbac0
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$4.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$5.class b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$5.class
new file mode 100644
index 0000000..9a0e87b
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$5.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$6.class b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$6.class
new file mode 100644
index 0000000..746f7c4
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$6.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$7.class b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$7.class
new file mode 100644
index 0000000..ddab837
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$7.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$8.class b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$8.class
new file mode 100644
index 0000000..7004c91
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$8.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$9.class b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$9.class
new file mode 100644
index 0000000..114cbcb
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme$9.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme.class b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme.class
new file mode 100644
index 0000000..1ae1df7
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/RainbowTheme.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/RendererTuple.class b/lib/json-20180813/com/lukflug/panelstudio/theme/RendererTuple.class
new file mode 100644
index 0000000..d07736c
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/RendererTuple.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/StandardColorPicker.class b/lib/json-20180813/com/lukflug/panelstudio/theme/StandardColorPicker.class
new file mode 100644
index 0000000..b323004
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/StandardColorPicker.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ThemeBase.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ThemeBase.class
new file mode 100644
index 0000000..fbff16c
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ThemeBase.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/ThemeTuple.class b/lib/json-20180813/com/lukflug/panelstudio/theme/ThemeTuple.class
new file mode 100644
index 0000000..7f7fe0e
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/ThemeTuple.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$1.class b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$1.class
new file mode 100644
index 0000000..e047f90
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$10.class b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$10.class
new file mode 100644
index 0000000..9d9f139
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$10.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$11.class b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$11.class
new file mode 100644
index 0000000..2d3fc9c
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$11.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$12.class b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$12.class
new file mode 100644
index 0000000..104a1a2
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$12.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$13.class b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$13.class
new file mode 100644
index 0000000..6f257e7
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$13.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$14.class b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$14.class
new file mode 100644
index 0000000..1e05fd8
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$14.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$15.class b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$15.class
new file mode 100644
index 0000000..3b785b5
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$15.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$2.class b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$2.class
new file mode 100644
index 0000000..4f56397
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$2.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$3.class b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$3.class
new file mode 100644
index 0000000..89f804d
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$3.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$4.class b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$4.class
new file mode 100644
index 0000000..9c661a6
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$4.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$5.class b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$5.class
new file mode 100644
index 0000000..20d606f
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$5.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$6.class b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$6.class
new file mode 100644
index 0000000..cde4d38
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$6.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$7.class b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$7.class
new file mode 100644
index 0000000..8cfa5b2
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$7.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$8.class b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$8.class
new file mode 100644
index 0000000..33b84e4
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$8.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$9.class b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$9.class
new file mode 100644
index 0000000..6180518
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme$9.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme.class b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme.class
new file mode 100644
index 0000000..232817d
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/theme/Windows31Theme.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/Button.class b/lib/json-20180813/com/lukflug/panelstudio/widget/Button.class
new file mode 100644
index 0000000..f8b857f
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/Button.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$1.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$1.class
new file mode 100644
index 0000000..dea3564
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$2.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$2.class
new file mode 100644
index 0000000..f1d82dc
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$2.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$3.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$3.class
new file mode 100644
index 0000000..1fc87a9
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$3.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$4$1.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$4$1.class
new file mode 100644
index 0000000..bb3c84a
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$4$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$4.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$4.class
new file mode 100644
index 0000000..e4a2b78
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$4.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$5.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$5.class
new file mode 100644
index 0000000..a4124cf
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$5.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$6.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$6.class
new file mode 100644
index 0000000..df8691e
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$6.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$7.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$7.class
new file mode 100644
index 0000000..28f3210
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent$7.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent.class
new file mode 100644
index 0000000..43d8e70
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ClosableComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ColorComponent$ColorNumber.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ColorComponent$ColorNumber.class
new file mode 100644
index 0000000..55c1d14
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ColorComponent$ColorNumber.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ColorComponent$RainbowToggle.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ColorComponent$RainbowToggle.class
new file mode 100644
index 0000000..068d7fb
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ColorComponent$RainbowToggle.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ColorComponent.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ColorComponent.class
new file mode 100644
index 0000000..adb1d08
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ColorComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ColorPicker.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ColorPicker.class
new file mode 100644
index 0000000..2ceb806
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ColorPicker.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ColorPickerComponent.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ColorPickerComponent.class
new file mode 100644
index 0000000..89a4f61
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ColorPickerComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ColorSliderComponent.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ColorSliderComponent.class
new file mode 100644
index 0000000..1ab1c63
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ColorSliderComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/CycleButton.class b/lib/json-20180813/com/lukflug/panelstudio/widget/CycleButton.class
new file mode 100644
index 0000000..783da38
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/CycleButton.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/CycleSwitch.class b/lib/json-20180813/com/lukflug/panelstudio/widget/CycleSwitch.class
new file mode 100644
index 0000000..7d585f4
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/CycleSwitch.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$1.class b/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$1.class
new file mode 100644
index 0000000..7b690c9
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$2.class b/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$2.class
new file mode 100644
index 0000000..bf1ea54
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$2.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$3.class b/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$3.class
new file mode 100644
index 0000000..b270979
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$3.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$4.class b/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$4.class
new file mode 100644
index 0000000..d1cbefc
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$4.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$5.class b/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$5.class
new file mode 100644
index 0000000..8e8b742
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$5.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$6.class b/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$6.class
new file mode 100644
index 0000000..2d0d872
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$6.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$7.class b/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$7.class
new file mode 100644
index 0000000..6d4e9c4
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$7.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$8.class b/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$8.class
new file mode 100644
index 0000000..538e697
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList$8.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList.class b/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList.class
new file mode 100644
index 0000000..1986c98
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/DropDownList.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/EmptySpace.class b/lib/json-20180813/com/lukflug/panelstudio/widget/EmptySpace.class
new file mode 100644
index 0000000..caba776
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/EmptySpace.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ITextFieldKeys.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ITextFieldKeys.class
new file mode 100644
index 0000000..c169ba3
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ITextFieldKeys.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/KeybindComponent.class b/lib/json-20180813/com/lukflug/panelstudio/widget/KeybindComponent.class
new file mode 100644
index 0000000..00daca4
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/KeybindComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/NumberSlider.class b/lib/json-20180813/com/lukflug/panelstudio/widget/NumberSlider.class
new file mode 100644
index 0000000..62bc931
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/NumberSlider.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/RadioButton.class b/lib/json-20180813/com/lukflug/panelstudio/widget/RadioButton.class
new file mode 100644
index 0000000..ff76c58
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/RadioButton.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ResizableComponent.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ResizableComponent.class
new file mode 100644
index 0000000..c943eb0
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ResizableComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBar.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBar.class
new file mode 100644
index 0000000..a6e27c5
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBar.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$1.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$1.class
new file mode 100644
index 0000000..b50ab8a
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$2.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$2.class
new file mode 100644
index 0000000..4b067a8
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$2.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$3.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$3.class
new file mode 100644
index 0000000..1166d46
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$3.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$4.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$4.class
new file mode 100644
index 0000000..a024a07
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$4.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$5.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$5.class
new file mode 100644
index 0000000..5e95c1c
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$5.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$6.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$6.class
new file mode 100644
index 0000000..cc70b3d
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$6.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$7.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$7.class
new file mode 100644
index 0000000..27616c0
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent$7.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent.class
new file mode 100644
index 0000000..b22cd97
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ScrollBarComponent.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/SearchableRadioButton$1.class b/lib/json-20180813/com/lukflug/panelstudio/widget/SearchableRadioButton$1.class
new file mode 100644
index 0000000..94ad0ff
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/SearchableRadioButton$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/SearchableRadioButton$2.class b/lib/json-20180813/com/lukflug/panelstudio/widget/SearchableRadioButton$2.class
new file mode 100644
index 0000000..9cab2c3
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/SearchableRadioButton$2.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/SearchableRadioButton$3.class b/lib/json-20180813/com/lukflug/panelstudio/widget/SearchableRadioButton$3.class
new file mode 100644
index 0000000..189292a
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/SearchableRadioButton$3.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/SearchableRadioButton$4.class b/lib/json-20180813/com/lukflug/panelstudio/widget/SearchableRadioButton$4.class
new file mode 100644
index 0000000..5af2c87
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/SearchableRadioButton$4.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/SearchableRadioButton$5.class b/lib/json-20180813/com/lukflug/panelstudio/widget/SearchableRadioButton$5.class
new file mode 100644
index 0000000..fab2b86
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/SearchableRadioButton$5.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/SearchableRadioButton.class b/lib/json-20180813/com/lukflug/panelstudio/widget/SearchableRadioButton.class
new file mode 100644
index 0000000..416311b
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/SearchableRadioButton.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/Slider.class b/lib/json-20180813/com/lukflug/panelstudio/widget/Slider.class
new file mode 100644
index 0000000..520d614
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/Slider.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$1.class b/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$1.class
new file mode 100644
index 0000000..5fbc26f
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$1.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$2.class b/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$2.class
new file mode 100644
index 0000000..4442cbd
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$2.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$3.class b/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$3.class
new file mode 100644
index 0000000..57a1ae2
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$3.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$4.class b/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$4.class
new file mode 100644
index 0000000..9ee13e3
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$4.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$5.class b/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$5.class
new file mode 100644
index 0000000..ddb0dcb
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$5.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$6.class b/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$6.class
new file mode 100644
index 0000000..15c465c
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$6.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$7.class b/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$7.class
new file mode 100644
index 0000000..87b50fa
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner$7.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner.class b/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner.class
new file mode 100644
index 0000000..365bbdd
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/Spinner.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/TextField.class b/lib/json-20180813/com/lukflug/panelstudio/widget/TextField.class
new file mode 100644
index 0000000..d886fe5
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/TextField.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ToggleButton.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ToggleButton.class
new file mode 100644
index 0000000..2473104
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ToggleButton.class differ
diff --git a/lib/json-20180813/com/lukflug/panelstudio/widget/ToggleSwitch.class b/lib/json-20180813/com/lukflug/panelstudio/widget/ToggleSwitch.class
new file mode 100644
index 0000000..f6f4283
Binary files /dev/null and b/lib/json-20180813/com/lukflug/panelstudio/widget/ToggleSwitch.class differ
diff --git a/lib/json-20180813/com/sun/jna/AltCallingConvention.class b/lib/json-20180813/com/sun/jna/AltCallingConvention.class
new file mode 100644
index 0000000..d7b2752
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/AltCallingConvention.class differ
diff --git a/lib/json-20180813/com/sun/jna/Callback$UncaughtExceptionHandler.class b/lib/json-20180813/com/sun/jna/Callback$UncaughtExceptionHandler.class
new file mode 100644
index 0000000..006e9f4
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Callback$UncaughtExceptionHandler.class differ
diff --git a/lib/json-20180813/com/sun/jna/Callback.class b/lib/json-20180813/com/sun/jna/Callback.class
new file mode 100644
index 0000000..db09e39
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Callback.class differ
diff --git a/lib/json-20180813/com/sun/jna/CallbackParameterContext.class b/lib/json-20180813/com/sun/jna/CallbackParameterContext.class
new file mode 100644
index 0000000..44d6571
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/CallbackParameterContext.class differ
diff --git a/lib/json-20180813/com/sun/jna/CallbackProxy.class b/lib/json-20180813/com/sun/jna/CallbackProxy.class
new file mode 100644
index 0000000..371a130
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/CallbackProxy.class differ
diff --git a/lib/json-20180813/com/sun/jna/CallbackReference$AttachOptions.class b/lib/json-20180813/com/sun/jna/CallbackReference$AttachOptions.class
new file mode 100644
index 0000000..31e9109
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/CallbackReference$AttachOptions.class differ
diff --git a/lib/json-20180813/com/sun/jna/CallbackReference$DefaultCallbackProxy.class b/lib/json-20180813/com/sun/jna/CallbackReference$DefaultCallbackProxy.class
new file mode 100644
index 0000000..9b996d2
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/CallbackReference$DefaultCallbackProxy.class differ
diff --git a/lib/json-20180813/com/sun/jna/CallbackReference$NativeFunctionHandler.class b/lib/json-20180813/com/sun/jna/CallbackReference$NativeFunctionHandler.class
new file mode 100644
index 0000000..6ef5b11
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/CallbackReference$NativeFunctionHandler.class differ
diff --git a/lib/json-20180813/com/sun/jna/CallbackReference.class b/lib/json-20180813/com/sun/jna/CallbackReference.class
new file mode 100644
index 0000000..5d7934f
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/CallbackReference.class differ
diff --git a/lib/json-20180813/com/sun/jna/CallbackResultContext.class b/lib/json-20180813/com/sun/jna/CallbackResultContext.class
new file mode 100644
index 0000000..92cfa4c
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/CallbackResultContext.class differ
diff --git a/lib/json-20180813/com/sun/jna/CallbackThreadInitializer.class b/lib/json-20180813/com/sun/jna/CallbackThreadInitializer.class
new file mode 100644
index 0000000..a21366b
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/CallbackThreadInitializer.class differ
diff --git a/lib/json-20180813/com/sun/jna/DefaultTypeMapper$Entry.class b/lib/json-20180813/com/sun/jna/DefaultTypeMapper$Entry.class
new file mode 100644
index 0000000..1188943
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/DefaultTypeMapper$Entry.class differ
diff --git a/lib/json-20180813/com/sun/jna/DefaultTypeMapper.class b/lib/json-20180813/com/sun/jna/DefaultTypeMapper.class
new file mode 100644
index 0000000..4bcb055
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/DefaultTypeMapper.class differ
diff --git a/lib/json-20180813/com/sun/jna/ELFAnalyser.class b/lib/json-20180813/com/sun/jna/ELFAnalyser.class
new file mode 100644
index 0000000..659d420
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/ELFAnalyser.class differ
diff --git a/lib/json-20180813/com/sun/jna/FromNativeContext.class b/lib/json-20180813/com/sun/jna/FromNativeContext.class
new file mode 100644
index 0000000..7dc47b3
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/FromNativeContext.class differ
diff --git a/lib/json-20180813/com/sun/jna/FromNativeConverter.class b/lib/json-20180813/com/sun/jna/FromNativeConverter.class
new file mode 100644
index 0000000..1e3a5ee
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/FromNativeConverter.class differ
diff --git a/lib/json-20180813/com/sun/jna/Function$NativeMappedArray.class b/lib/json-20180813/com/sun/jna/Function$NativeMappedArray.class
new file mode 100644
index 0000000..f7735d5
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Function$NativeMappedArray.class differ
diff --git a/lib/json-20180813/com/sun/jna/Function$PointerArray.class b/lib/json-20180813/com/sun/jna/Function$PointerArray.class
new file mode 100644
index 0000000..5ce9586
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Function$PointerArray.class differ
diff --git a/lib/json-20180813/com/sun/jna/Function$PostCallRead.class b/lib/json-20180813/com/sun/jna/Function$PostCallRead.class
new file mode 100644
index 0000000..4883c04
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Function$PostCallRead.class differ
diff --git a/lib/json-20180813/com/sun/jna/Function.class b/lib/json-20180813/com/sun/jna/Function.class
new file mode 100644
index 0000000..baef74c
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Function.class differ
diff --git a/lib/json-20180813/com/sun/jna/FunctionMapper.class b/lib/json-20180813/com/sun/jna/FunctionMapper.class
new file mode 100644
index 0000000..c6b4942
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/FunctionMapper.class differ
diff --git a/lib/json-20180813/com/sun/jna/FunctionParameterContext.class b/lib/json-20180813/com/sun/jna/FunctionParameterContext.class
new file mode 100644
index 0000000..29c9997
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/FunctionParameterContext.class differ
diff --git a/lib/json-20180813/com/sun/jna/FunctionResultContext.class b/lib/json-20180813/com/sun/jna/FunctionResultContext.class
new file mode 100644
index 0000000..72c5b41
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/FunctionResultContext.class differ
diff --git a/lib/json-20180813/com/sun/jna/IntegerType.class b/lib/json-20180813/com/sun/jna/IntegerType.class
new file mode 100644
index 0000000..5b849b0
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/IntegerType.class differ
diff --git a/lib/json-20180813/com/sun/jna/InvocationMapper.class b/lib/json-20180813/com/sun/jna/InvocationMapper.class
new file mode 100644
index 0000000..ce84f5a
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/InvocationMapper.class differ
diff --git a/lib/json-20180813/com/sun/jna/JNIEnv.class b/lib/json-20180813/com/sun/jna/JNIEnv.class
new file mode 100644
index 0000000..7c0eba6
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/JNIEnv.class differ
diff --git a/lib/json-20180813/com/sun/jna/LastErrorException.class b/lib/json-20180813/com/sun/jna/LastErrorException.class
new file mode 100644
index 0000000..a1de98a
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/LastErrorException.class differ
diff --git a/lib/json-20180813/com/sun/jna/Library$Handler$FunctionInfo.class b/lib/json-20180813/com/sun/jna/Library$Handler$FunctionInfo.class
new file mode 100644
index 0000000..961601c
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Library$Handler$FunctionInfo.class differ
diff --git a/lib/json-20180813/com/sun/jna/Library$Handler.class b/lib/json-20180813/com/sun/jna/Library$Handler.class
new file mode 100644
index 0000000..17ef1c1
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Library$Handler.class differ
diff --git a/lib/json-20180813/com/sun/jna/Library.class b/lib/json-20180813/com/sun/jna/Library.class
new file mode 100644
index 0000000..046b850
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Library.class differ
diff --git a/lib/json-20180813/com/sun/jna/Memory$SharedMemory.class b/lib/json-20180813/com/sun/jna/Memory$SharedMemory.class
new file mode 100644
index 0000000..fd1c5b7
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Memory$SharedMemory.class differ
diff --git a/lib/json-20180813/com/sun/jna/Memory.class b/lib/json-20180813/com/sun/jna/Memory.class
new file mode 100644
index 0000000..a9332d8
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Memory.class differ
diff --git a/lib/json-20180813/com/sun/jna/MethodParameterContext.class b/lib/json-20180813/com/sun/jna/MethodParameterContext.class
new file mode 100644
index 0000000..2897131
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/MethodParameterContext.class differ
diff --git a/lib/json-20180813/com/sun/jna/MethodResultContext.class b/lib/json-20180813/com/sun/jna/MethodResultContext.class
new file mode 100644
index 0000000..d492349
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/MethodResultContext.class differ
diff --git a/lib/json-20180813/com/sun/jna/Native$1.class b/lib/json-20180813/com/sun/jna/Native$1.class
new file mode 100644
index 0000000..2322a6d
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Native$1.class differ
diff --git a/lib/json-20180813/com/sun/jna/Native$2.class b/lib/json-20180813/com/sun/jna/Native$2.class
new file mode 100644
index 0000000..9f671e8
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Native$2.class differ
diff --git a/lib/json-20180813/com/sun/jna/Native$3.class b/lib/json-20180813/com/sun/jna/Native$3.class
new file mode 100644
index 0000000..315b439
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Native$3.class differ
diff --git a/lib/json-20180813/com/sun/jna/Native$4.class b/lib/json-20180813/com/sun/jna/Native$4.class
new file mode 100644
index 0000000..d2ec82f
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Native$4.class differ
diff --git a/lib/json-20180813/com/sun/jna/Native$5.class b/lib/json-20180813/com/sun/jna/Native$5.class
new file mode 100644
index 0000000..bbea522
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Native$5.class differ
diff --git a/lib/json-20180813/com/sun/jna/Native$6.class b/lib/json-20180813/com/sun/jna/Native$6.class
new file mode 100644
index 0000000..31baef4
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Native$6.class differ
diff --git a/lib/json-20180813/com/sun/jna/Native$7.class b/lib/json-20180813/com/sun/jna/Native$7.class
new file mode 100644
index 0000000..bb9a5ca
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Native$7.class differ
diff --git a/lib/json-20180813/com/sun/jna/Native$AWT.class b/lib/json-20180813/com/sun/jna/Native$AWT.class
new file mode 100644
index 0000000..709ecef
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Native$AWT.class differ
diff --git a/lib/json-20180813/com/sun/jna/Native$Buffers.class b/lib/json-20180813/com/sun/jna/Native$Buffers.class
new file mode 100644
index 0000000..ba1a833
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Native$Buffers.class differ
diff --git a/lib/json-20180813/com/sun/jna/Native$ffi_callback.class b/lib/json-20180813/com/sun/jna/Native$ffi_callback.class
new file mode 100644
index 0000000..5db1a53
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Native$ffi_callback.class differ
diff --git a/lib/json-20180813/com/sun/jna/Native.class b/lib/json-20180813/com/sun/jna/Native.class
new file mode 100644
index 0000000..067fa9f
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Native.class differ
diff --git a/lib/json-20180813/com/sun/jna/NativeLibrary$1.class b/lib/json-20180813/com/sun/jna/NativeLibrary$1.class
new file mode 100644
index 0000000..5dbf4a4
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/NativeLibrary$1.class differ
diff --git a/lib/json-20180813/com/sun/jna/NativeLibrary$2.class b/lib/json-20180813/com/sun/jna/NativeLibrary$2.class
new file mode 100644
index 0000000..d0fbc98
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/NativeLibrary$2.class differ
diff --git a/lib/json-20180813/com/sun/jna/NativeLibrary.class b/lib/json-20180813/com/sun/jna/NativeLibrary.class
new file mode 100644
index 0000000..5699491
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/NativeLibrary.class differ
diff --git a/lib/json-20180813/com/sun/jna/NativeLong.class b/lib/json-20180813/com/sun/jna/NativeLong.class
new file mode 100644
index 0000000..872affd
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/NativeLong.class differ
diff --git a/lib/json-20180813/com/sun/jna/NativeMapped.class b/lib/json-20180813/com/sun/jna/NativeMapped.class
new file mode 100644
index 0000000..b6aebd8
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/NativeMapped.class differ
diff --git a/lib/json-20180813/com/sun/jna/NativeMappedConverter.class b/lib/json-20180813/com/sun/jna/NativeMappedConverter.class
new file mode 100644
index 0000000..c4b7439
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/NativeMappedConverter.class differ
diff --git a/lib/json-20180813/com/sun/jna/NativeString$StringMemory.class b/lib/json-20180813/com/sun/jna/NativeString$StringMemory.class
new file mode 100644
index 0000000..02aff3b
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/NativeString$StringMemory.class differ
diff --git a/lib/json-20180813/com/sun/jna/NativeString.class b/lib/json-20180813/com/sun/jna/NativeString.class
new file mode 100644
index 0000000..6558770
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/NativeString.class differ
diff --git a/lib/json-20180813/com/sun/jna/Platform.class b/lib/json-20180813/com/sun/jna/Platform.class
new file mode 100644
index 0000000..e48970d
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Platform.class differ
diff --git a/lib/json-20180813/com/sun/jna/Pointer$1.class b/lib/json-20180813/com/sun/jna/Pointer$1.class
new file mode 100644
index 0000000..c4870d9
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Pointer$1.class differ
diff --git a/lib/json-20180813/com/sun/jna/Pointer$Opaque.class b/lib/json-20180813/com/sun/jna/Pointer$Opaque.class
new file mode 100644
index 0000000..9732f4d
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Pointer$Opaque.class differ
diff --git a/lib/json-20180813/com/sun/jna/Pointer.class b/lib/json-20180813/com/sun/jna/Pointer.class
new file mode 100644
index 0000000..04c63f6
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Pointer.class differ
diff --git a/lib/json-20180813/com/sun/jna/PointerType.class b/lib/json-20180813/com/sun/jna/PointerType.class
new file mode 100644
index 0000000..61811e6
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/PointerType.class differ
diff --git a/lib/json-20180813/com/sun/jna/StringArray.class b/lib/json-20180813/com/sun/jna/StringArray.class
new file mode 100644
index 0000000..df9bd52
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/StringArray.class differ
diff --git a/lib/json-20180813/com/sun/jna/Structure$1.class b/lib/json-20180813/com/sun/jna/Structure$1.class
new file mode 100644
index 0000000..152b527
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Structure$1.class differ
diff --git a/lib/json-20180813/com/sun/jna/Structure$2.class b/lib/json-20180813/com/sun/jna/Structure$2.class
new file mode 100644
index 0000000..04e6ca7
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Structure$2.class differ
diff --git a/lib/json-20180813/com/sun/jna/Structure$3.class b/lib/json-20180813/com/sun/jna/Structure$3.class
new file mode 100644
index 0000000..155a51a
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Structure$3.class differ
diff --git a/lib/json-20180813/com/sun/jna/Structure$AutoAllocated.class b/lib/json-20180813/com/sun/jna/Structure$AutoAllocated.class
new file mode 100644
index 0000000..0d23f0a
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Structure$AutoAllocated.class differ
diff --git a/lib/json-20180813/com/sun/jna/Structure$ByReference.class b/lib/json-20180813/com/sun/jna/Structure$ByReference.class
new file mode 100644
index 0000000..271329c
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Structure$ByReference.class differ
diff --git a/lib/json-20180813/com/sun/jna/Structure$ByValue.class b/lib/json-20180813/com/sun/jna/Structure$ByValue.class
new file mode 100644
index 0000000..951c6a7
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Structure$ByValue.class differ
diff --git a/lib/json-20180813/com/sun/jna/Structure$FFIType$FFITypes.class b/lib/json-20180813/com/sun/jna/Structure$FFIType$FFITypes.class
new file mode 100644
index 0000000..808783b
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Structure$FFIType$FFITypes.class differ
diff --git a/lib/json-20180813/com/sun/jna/Structure$FFIType$size_t.class b/lib/json-20180813/com/sun/jna/Structure$FFIType$size_t.class
new file mode 100644
index 0000000..515dddc
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Structure$FFIType$size_t.class differ
diff --git a/lib/json-20180813/com/sun/jna/Structure$FFIType.class b/lib/json-20180813/com/sun/jna/Structure$FFIType.class
new file mode 100644
index 0000000..47e03ce
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Structure$FFIType.class differ
diff --git a/lib/json-20180813/com/sun/jna/Structure$LayoutInfo.class b/lib/json-20180813/com/sun/jna/Structure$LayoutInfo.class
new file mode 100644
index 0000000..d274a2d
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Structure$LayoutInfo.class differ
diff --git a/lib/json-20180813/com/sun/jna/Structure$StructField.class b/lib/json-20180813/com/sun/jna/Structure$StructField.class
new file mode 100644
index 0000000..35a2f56
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Structure$StructField.class differ
diff --git a/lib/json-20180813/com/sun/jna/Structure$StructureSet.class b/lib/json-20180813/com/sun/jna/Structure$StructureSet.class
new file mode 100644
index 0000000..d374212
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Structure$StructureSet.class differ
diff --git a/lib/json-20180813/com/sun/jna/Structure.class b/lib/json-20180813/com/sun/jna/Structure.class
new file mode 100644
index 0000000..2c97b2c
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Structure.class differ
diff --git a/lib/json-20180813/com/sun/jna/StructureReadContext.class b/lib/json-20180813/com/sun/jna/StructureReadContext.class
new file mode 100644
index 0000000..fd142f3
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/StructureReadContext.class differ
diff --git a/lib/json-20180813/com/sun/jna/StructureWriteContext.class b/lib/json-20180813/com/sun/jna/StructureWriteContext.class
new file mode 100644
index 0000000..aef687c
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/StructureWriteContext.class differ
diff --git a/lib/json-20180813/com/sun/jna/ToNativeContext.class b/lib/json-20180813/com/sun/jna/ToNativeContext.class
new file mode 100644
index 0000000..7c44e6d
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/ToNativeContext.class differ
diff --git a/lib/json-20180813/com/sun/jna/ToNativeConverter.class b/lib/json-20180813/com/sun/jna/ToNativeConverter.class
new file mode 100644
index 0000000..5988be1
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/ToNativeConverter.class differ
diff --git a/lib/json-20180813/com/sun/jna/TypeConverter.class b/lib/json-20180813/com/sun/jna/TypeConverter.class
new file mode 100644
index 0000000..0523b1e
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/TypeConverter.class differ
diff --git a/lib/json-20180813/com/sun/jna/TypeMapper.class b/lib/json-20180813/com/sun/jna/TypeMapper.class
new file mode 100644
index 0000000..7356ae2
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/TypeMapper.class differ
diff --git a/lib/json-20180813/com/sun/jna/Union.class b/lib/json-20180813/com/sun/jna/Union.class
new file mode 100644
index 0000000..392efe9
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Union.class differ
diff --git a/lib/json-20180813/com/sun/jna/VarArgsChecker$1.class b/lib/json-20180813/com/sun/jna/VarArgsChecker$1.class
new file mode 100644
index 0000000..67d5b67
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/VarArgsChecker$1.class differ
diff --git a/lib/json-20180813/com/sun/jna/VarArgsChecker$NoVarArgsChecker.class b/lib/json-20180813/com/sun/jna/VarArgsChecker$NoVarArgsChecker.class
new file mode 100644
index 0000000..4171fbe
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/VarArgsChecker$NoVarArgsChecker.class differ
diff --git a/lib/json-20180813/com/sun/jna/VarArgsChecker$RealVarArgsChecker.class b/lib/json-20180813/com/sun/jna/VarArgsChecker$RealVarArgsChecker.class
new file mode 100644
index 0000000..90f2656
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/VarArgsChecker$RealVarArgsChecker.class differ
diff --git a/lib/json-20180813/com/sun/jna/VarArgsChecker.class b/lib/json-20180813/com/sun/jna/VarArgsChecker.class
new file mode 100644
index 0000000..822dc9d
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/VarArgsChecker.class differ
diff --git a/lib/json-20180813/com/sun/jna/Version.class b/lib/json-20180813/com/sun/jna/Version.class
new file mode 100644
index 0000000..7d6b847
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/Version.class differ
diff --git a/lib/json-20180813/com/sun/jna/WString.class b/lib/json-20180813/com/sun/jna/WString.class
new file mode 100644
index 0000000..456031f
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/WString.class differ
diff --git a/lib/json-20180813/com/sun/jna/WeakMemoryHolder.class b/lib/json-20180813/com/sun/jna/WeakMemoryHolder.class
new file mode 100644
index 0000000..3bac8e6
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/WeakMemoryHolder.class differ
diff --git a/lib/json-20180813/com/sun/jna/aix-ppc/libjnidispatch.a b/lib/json-20180813/com/sun/jna/aix-ppc/libjnidispatch.a
new file mode 100644
index 0000000..1d82809
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/aix-ppc/libjnidispatch.a differ
diff --git a/lib/json-20180813/com/sun/jna/aix-ppc64/libjnidispatch.a b/lib/json-20180813/com/sun/jna/aix-ppc64/libjnidispatch.a
new file mode 100644
index 0000000..414ac11
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/aix-ppc64/libjnidispatch.a differ
diff --git a/lib/json-20180813/com/sun/jna/darwin/libjnidispatch.jnilib b/lib/json-20180813/com/sun/jna/darwin/libjnidispatch.jnilib
new file mode 100644
index 0000000..ac30c52
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/darwin/libjnidispatch.jnilib differ
diff --git a/lib/json-20180813/com/sun/jna/freebsd-x86-64/libjnidispatch.so b/lib/json-20180813/com/sun/jna/freebsd-x86-64/libjnidispatch.so
new file mode 100644
index 0000000..9f6c2ef
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/freebsd-x86-64/libjnidispatch.so differ
diff --git a/lib/json-20180813/com/sun/jna/freebsd-x86/libjnidispatch.so b/lib/json-20180813/com/sun/jna/freebsd-x86/libjnidispatch.so
new file mode 100644
index 0000000..67c3583
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/freebsd-x86/libjnidispatch.so differ
diff --git a/lib/json-20180813/com/sun/jna/linux-aarch64/libjnidispatch.so b/lib/json-20180813/com/sun/jna/linux-aarch64/libjnidispatch.so
new file mode 100644
index 0000000..9e956ba
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/linux-aarch64/libjnidispatch.so differ
diff --git a/lib/json-20180813/com/sun/jna/linux-arm/libjnidispatch.so b/lib/json-20180813/com/sun/jna/linux-arm/libjnidispatch.so
new file mode 100644
index 0000000..2a5dba6
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/linux-arm/libjnidispatch.so differ
diff --git a/lib/json-20180813/com/sun/jna/linux-armel/libjnidispatch.so b/lib/json-20180813/com/sun/jna/linux-armel/libjnidispatch.so
new file mode 100644
index 0000000..a060034
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/linux-armel/libjnidispatch.so differ
diff --git a/lib/json-20180813/com/sun/jna/linux-mips64el/libjnidispatch.so b/lib/json-20180813/com/sun/jna/linux-mips64el/libjnidispatch.so
new file mode 100644
index 0000000..9d0d04c
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/linux-mips64el/libjnidispatch.so differ
diff --git a/lib/json-20180813/com/sun/jna/linux-ppc/libjnidispatch.so b/lib/json-20180813/com/sun/jna/linux-ppc/libjnidispatch.so
new file mode 100644
index 0000000..2a8dc61
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/linux-ppc/libjnidispatch.so differ
diff --git a/lib/json-20180813/com/sun/jna/linux-ppc64le/libjnidispatch.so b/lib/json-20180813/com/sun/jna/linux-ppc64le/libjnidispatch.so
new file mode 100644
index 0000000..2523460
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/linux-ppc64le/libjnidispatch.so differ
diff --git a/lib/json-20180813/com/sun/jna/linux-s390x/libjnidispatch.so b/lib/json-20180813/com/sun/jna/linux-s390x/libjnidispatch.so
new file mode 100644
index 0000000..b268e15
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/linux-s390x/libjnidispatch.so differ
diff --git a/lib/json-20180813/com/sun/jna/linux-x86-64/libjnidispatch.so b/lib/json-20180813/com/sun/jna/linux-x86-64/libjnidispatch.so
new file mode 100644
index 0000000..93db79e
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/linux-x86-64/libjnidispatch.so differ
diff --git a/lib/json-20180813/com/sun/jna/linux-x86/libjnidispatch.so b/lib/json-20180813/com/sun/jna/linux-x86/libjnidispatch.so
new file mode 100644
index 0000000..0e85235
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/linux-x86/libjnidispatch.so differ
diff --git a/lib/json-20180813/com/sun/jna/openbsd-x86-64/libjnidispatch.so b/lib/json-20180813/com/sun/jna/openbsd-x86-64/libjnidispatch.so
new file mode 100644
index 0000000..ef361c2
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/openbsd-x86-64/libjnidispatch.so differ
diff --git a/lib/json-20180813/com/sun/jna/openbsd-x86/libjnidispatch.so b/lib/json-20180813/com/sun/jna/openbsd-x86/libjnidispatch.so
new file mode 100644
index 0000000..53fe149
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/openbsd-x86/libjnidispatch.so differ
diff --git a/lib/json-20180813/com/sun/jna/ptr/ByReference.class b/lib/json-20180813/com/sun/jna/ptr/ByReference.class
new file mode 100644
index 0000000..f07c9e5
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/ptr/ByReference.class differ
diff --git a/lib/json-20180813/com/sun/jna/ptr/ByteByReference.class b/lib/json-20180813/com/sun/jna/ptr/ByteByReference.class
new file mode 100644
index 0000000..380429d
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/ptr/ByteByReference.class differ
diff --git a/lib/json-20180813/com/sun/jna/ptr/DoubleByReference.class b/lib/json-20180813/com/sun/jna/ptr/DoubleByReference.class
new file mode 100644
index 0000000..042fb31
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/ptr/DoubleByReference.class differ
diff --git a/lib/json-20180813/com/sun/jna/ptr/FloatByReference.class b/lib/json-20180813/com/sun/jna/ptr/FloatByReference.class
new file mode 100644
index 0000000..f1ea7c9
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/ptr/FloatByReference.class differ
diff --git a/lib/json-20180813/com/sun/jna/ptr/IntByReference.class b/lib/json-20180813/com/sun/jna/ptr/IntByReference.class
new file mode 100644
index 0000000..58eadfa
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/ptr/IntByReference.class differ
diff --git a/lib/json-20180813/com/sun/jna/ptr/LongByReference.class b/lib/json-20180813/com/sun/jna/ptr/LongByReference.class
new file mode 100644
index 0000000..0a698ed
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/ptr/LongByReference.class differ
diff --git a/lib/json-20180813/com/sun/jna/ptr/NativeLongByReference.class b/lib/json-20180813/com/sun/jna/ptr/NativeLongByReference.class
new file mode 100644
index 0000000..d2e02b9
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/ptr/NativeLongByReference.class differ
diff --git a/lib/json-20180813/com/sun/jna/ptr/PointerByReference.class b/lib/json-20180813/com/sun/jna/ptr/PointerByReference.class
new file mode 100644
index 0000000..5e039c9
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/ptr/PointerByReference.class differ
diff --git a/lib/json-20180813/com/sun/jna/ptr/ShortByReference.class b/lib/json-20180813/com/sun/jna/ptr/ShortByReference.class
new file mode 100644
index 0000000..a778820
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/ptr/ShortByReference.class differ
diff --git a/lib/json-20180813/com/sun/jna/sunos-sparc/libjnidispatch.so b/lib/json-20180813/com/sun/jna/sunos-sparc/libjnidispatch.so
new file mode 100644
index 0000000..c0e897d
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/sunos-sparc/libjnidispatch.so differ
diff --git a/lib/json-20180813/com/sun/jna/sunos-sparcv9/libjnidispatch.so b/lib/json-20180813/com/sun/jna/sunos-sparcv9/libjnidispatch.so
new file mode 100644
index 0000000..7f2472e
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/sunos-sparcv9/libjnidispatch.so differ
diff --git a/lib/json-20180813/com/sun/jna/sunos-x86-64/libjnidispatch.so b/lib/json-20180813/com/sun/jna/sunos-x86-64/libjnidispatch.so
new file mode 100644
index 0000000..d3e7a05
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/sunos-x86-64/libjnidispatch.so differ
diff --git a/lib/json-20180813/com/sun/jna/win32-x86-64/jnidispatch.dll b/lib/json-20180813/com/sun/jna/win32-x86-64/jnidispatch.dll
new file mode 100644
index 0000000..10d49b2
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/win32-x86-64/jnidispatch.dll differ
diff --git a/lib/json-20180813/com/sun/jna/win32-x86/jnidispatch.dll b/lib/json-20180813/com/sun/jna/win32-x86/jnidispatch.dll
new file mode 100644
index 0000000..213a2bb
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/win32-x86/jnidispatch.dll differ
diff --git a/lib/json-20180813/com/sun/jna/win32/DLLCallback.class b/lib/json-20180813/com/sun/jna/win32/DLLCallback.class
new file mode 100644
index 0000000..871c33b
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/win32/DLLCallback.class differ
diff --git a/lib/json-20180813/com/sun/jna/win32/StdCall.class b/lib/json-20180813/com/sun/jna/win32/StdCall.class
new file mode 100644
index 0000000..b6fdbd0
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/win32/StdCall.class differ
diff --git a/lib/json-20180813/com/sun/jna/win32/StdCallFunctionMapper.class b/lib/json-20180813/com/sun/jna/win32/StdCallFunctionMapper.class
new file mode 100644
index 0000000..3153cb2
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/win32/StdCallFunctionMapper.class differ
diff --git a/lib/json-20180813/com/sun/jna/win32/StdCallLibrary$StdCallCallback.class b/lib/json-20180813/com/sun/jna/win32/StdCallLibrary$StdCallCallback.class
new file mode 100644
index 0000000..39287a6
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/win32/StdCallLibrary$StdCallCallback.class differ
diff --git a/lib/json-20180813/com/sun/jna/win32/StdCallLibrary.class b/lib/json-20180813/com/sun/jna/win32/StdCallLibrary.class
new file mode 100644
index 0000000..2f19e8b
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/win32/StdCallLibrary.class differ
diff --git a/lib/json-20180813/com/sun/jna/win32/W32APIFunctionMapper.class b/lib/json-20180813/com/sun/jna/win32/W32APIFunctionMapper.class
new file mode 100644
index 0000000..3c17e2d
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/win32/W32APIFunctionMapper.class differ
diff --git a/lib/json-20180813/com/sun/jna/win32/W32APIOptions$1.class b/lib/json-20180813/com/sun/jna/win32/W32APIOptions$1.class
new file mode 100644
index 0000000..f8d5970
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/win32/W32APIOptions$1.class differ
diff --git a/lib/json-20180813/com/sun/jna/win32/W32APIOptions$2.class b/lib/json-20180813/com/sun/jna/win32/W32APIOptions$2.class
new file mode 100644
index 0000000..1beabb2
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/win32/W32APIOptions$2.class differ
diff --git a/lib/json-20180813/com/sun/jna/win32/W32APIOptions.class b/lib/json-20180813/com/sun/jna/win32/W32APIOptions.class
new file mode 100644
index 0000000..b34c1b1
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/win32/W32APIOptions.class differ
diff --git a/lib/json-20180813/com/sun/jna/win32/W32APITypeMapper$1.class b/lib/json-20180813/com/sun/jna/win32/W32APITypeMapper$1.class
new file mode 100644
index 0000000..ad35678
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/win32/W32APITypeMapper$1.class differ
diff --git a/lib/json-20180813/com/sun/jna/win32/W32APITypeMapper$2.class b/lib/json-20180813/com/sun/jna/win32/W32APITypeMapper$2.class
new file mode 100644
index 0000000..32b28d2
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/win32/W32APITypeMapper$2.class differ
diff --git a/lib/json-20180813/com/sun/jna/win32/W32APITypeMapper.class b/lib/json-20180813/com/sun/jna/win32/W32APITypeMapper.class
new file mode 100644
index 0000000..beb0414
Binary files /dev/null and b/lib/json-20180813/com/sun/jna/win32/W32APITypeMapper.class differ
diff --git a/lib/json-20180813/darwin/libdiscord-rpc.dylib b/lib/json-20180813/darwin/libdiscord-rpc.dylib
new file mode 100644
index 0000000..f01acd6
Binary files /dev/null and b/lib/json-20180813/darwin/libdiscord-rpc.dylib differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/AuthPoints.class b/lib/json-20180813/fr/litarvan/openauth/AuthPoints.class
new file mode 100644
index 0000000..f50a216
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/AuthPoints.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/AuthenticationException.class b/lib/json-20180813/fr/litarvan/openauth/AuthenticationException.class
new file mode 100644
index 0000000..84edd42
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/AuthenticationException.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/Authenticator.class b/lib/json-20180813/fr/litarvan/openauth/Authenticator.class
new file mode 100644
index 0000000..ce4945e
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/Authenticator.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/AuthTokens.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/AuthTokens.class
new file mode 100644
index 0000000..85ed9ec
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/AuthTokens.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/HttpClient.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/HttpClient.class
new file mode 100644
index 0000000..208fd86
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/HttpClient.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/LoginFrame$1.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/LoginFrame$1.class
new file mode 100644
index 0000000..b5690c3
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/LoginFrame$1.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/LoginFrame$2.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/LoginFrame$2.class
new file mode 100644
index 0000000..bdec85a
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/LoginFrame$2.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/LoginFrame.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/LoginFrame.class
new file mode 100644
index 0000000..5d7a052
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/LoginFrame.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/MicrosoftAuthResult.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/MicrosoftAuthResult.class
new file mode 100644
index 0000000..efe0168
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/MicrosoftAuthResult.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/MicrosoftAuthenticationException.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/MicrosoftAuthenticationException.class
new file mode 100644
index 0000000..4dc0466
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/MicrosoftAuthenticationException.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/MicrosoftAuthenticator.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/MicrosoftAuthenticator.class
new file mode 100644
index 0000000..2940ecf
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/MicrosoftAuthenticator.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/MicrosoftPatchedHttpURLConnection.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/MicrosoftPatchedHttpURLConnection.class
new file mode 100644
index 0000000..d6889d8
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/MicrosoftPatchedHttpURLConnection.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/PreAuthData.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/PreAuthData.class
new file mode 100644
index 0000000..364ee96
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/PreAuthData.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/model/request/MinecraftLoginRequest.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/request/MinecraftLoginRequest.class
new file mode 100644
index 0000000..8cb745b
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/request/MinecraftLoginRequest.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/model/request/XSTSAuthorizationProperties.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/request/XSTSAuthorizationProperties.class
new file mode 100644
index 0000000..2551ef9
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/request/XSTSAuthorizationProperties.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/model/request/XboxLiveLoginProperties.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/request/XboxLiveLoginProperties.class
new file mode 100644
index 0000000..766654a
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/request/XboxLiveLoginProperties.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/model/request/XboxLoginRequest.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/request/XboxLoginRequest.class
new file mode 100644
index 0000000..ef0775e
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/request/XboxLoginRequest.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/MicrosoftRefreshResponse.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/MicrosoftRefreshResponse.class
new file mode 100644
index 0000000..dbeccd0
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/MicrosoftRefreshResponse.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/MinecraftLoginResponse.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/MinecraftLoginResponse.class
new file mode 100644
index 0000000..6e4981d
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/MinecraftLoginResponse.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/MinecraftProfile$MinecraftSkin.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/MinecraftProfile$MinecraftSkin.class
new file mode 100644
index 0000000..f706167
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/MinecraftProfile$MinecraftSkin.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/MinecraftProfile.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/MinecraftProfile.class
new file mode 100644
index 0000000..d0ee1a9
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/MinecraftProfile.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/MinecraftStoreResponse$StoreProduct.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/MinecraftStoreResponse$StoreProduct.class
new file mode 100644
index 0000000..47a4653
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/MinecraftStoreResponse$StoreProduct.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/MinecraftStoreResponse.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/MinecraftStoreResponse.class
new file mode 100644
index 0000000..84fade3
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/MinecraftStoreResponse.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/XboxLoginResponse$XboxLiveLoginResponseClaims.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/XboxLoginResponse$XboxLiveLoginResponseClaims.class
new file mode 100644
index 0000000..a99d6b4
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/XboxLoginResponse$XboxLiveLoginResponseClaims.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/XboxLoginResponse$XboxLiveUserInfo.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/XboxLoginResponse$XboxLiveUserInfo.class
new file mode 100644
index 0000000..1e72931
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/XboxLoginResponse$XboxLiveUserInfo.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/XboxLoginResponse.class b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/XboxLoginResponse.class
new file mode 100644
index 0000000..f0a5523
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/microsoft/model/response/XboxLoginResponse.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/model/AuthAgent.class b/lib/json-20180813/fr/litarvan/openauth/model/AuthAgent.class
new file mode 100644
index 0000000..fcb8e20
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/model/AuthAgent.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/model/AuthError.class b/lib/json-20180813/fr/litarvan/openauth/model/AuthError.class
new file mode 100644
index 0000000..d7e7482
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/model/AuthError.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/model/AuthProfile.class b/lib/json-20180813/fr/litarvan/openauth/model/AuthProfile.class
new file mode 100644
index 0000000..68a153e
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/model/AuthProfile.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/model/request/AuthRequest.class b/lib/json-20180813/fr/litarvan/openauth/model/request/AuthRequest.class
new file mode 100644
index 0000000..585c690
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/model/request/AuthRequest.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/model/request/InvalidateRequest.class b/lib/json-20180813/fr/litarvan/openauth/model/request/InvalidateRequest.class
new file mode 100644
index 0000000..61fbbeb
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/model/request/InvalidateRequest.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/model/request/RefreshRequest.class b/lib/json-20180813/fr/litarvan/openauth/model/request/RefreshRequest.class
new file mode 100644
index 0000000..b2d4f57
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/model/request/RefreshRequest.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/model/request/SignoutRequest.class b/lib/json-20180813/fr/litarvan/openauth/model/request/SignoutRequest.class
new file mode 100644
index 0000000..3554d00
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/model/request/SignoutRequest.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/model/request/ValidateRequest.class b/lib/json-20180813/fr/litarvan/openauth/model/request/ValidateRequest.class
new file mode 100644
index 0000000..0d95777
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/model/request/ValidateRequest.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/model/response/AuthResponse.class b/lib/json-20180813/fr/litarvan/openauth/model/response/AuthResponse.class
new file mode 100644
index 0000000..4405729
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/model/response/AuthResponse.class differ
diff --git a/lib/json-20180813/fr/litarvan/openauth/model/response/RefreshResponse.class b/lib/json-20180813/fr/litarvan/openauth/model/response/RefreshResponse.class
new file mode 100644
index 0000000..9ce575a
Binary files /dev/null and b/lib/json-20180813/fr/litarvan/openauth/model/response/RefreshResponse.class differ
diff --git a/lib/json-20180813/javax/vecmath/AxisAngle4d.class b/lib/json-20180813/javax/vecmath/AxisAngle4d.class
new file mode 100644
index 0000000..df87e60
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/AxisAngle4d.class differ
diff --git a/lib/json-20180813/javax/vecmath/AxisAngle4f.class b/lib/json-20180813/javax/vecmath/AxisAngle4f.class
new file mode 100644
index 0000000..252c6a1
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/AxisAngle4f.class differ
diff --git a/lib/json-20180813/javax/vecmath/Color3b.class b/lib/json-20180813/javax/vecmath/Color3b.class
new file mode 100644
index 0000000..229b6c9
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Color3b.class differ
diff --git a/lib/json-20180813/javax/vecmath/Color3f.class b/lib/json-20180813/javax/vecmath/Color3f.class
new file mode 100644
index 0000000..610ee66
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Color3f.class differ
diff --git a/lib/json-20180813/javax/vecmath/Color4b.class b/lib/json-20180813/javax/vecmath/Color4b.class
new file mode 100644
index 0000000..782b1d4
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Color4b.class differ
diff --git a/lib/json-20180813/javax/vecmath/Color4f.class b/lib/json-20180813/javax/vecmath/Color4f.class
new file mode 100644
index 0000000..56672ac
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Color4f.class differ
diff --git a/lib/json-20180813/javax/vecmath/GMatrix.class b/lib/json-20180813/javax/vecmath/GMatrix.class
new file mode 100644
index 0000000..96d82a7
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/GMatrix.class differ
diff --git a/lib/json-20180813/javax/vecmath/GVector.class b/lib/json-20180813/javax/vecmath/GVector.class
new file mode 100644
index 0000000..81de9a6
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/GVector.class differ
diff --git a/lib/json-20180813/javax/vecmath/Matrix3d.class b/lib/json-20180813/javax/vecmath/Matrix3d.class
new file mode 100644
index 0000000..d0e7ac8
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Matrix3d.class differ
diff --git a/lib/json-20180813/javax/vecmath/Matrix3f.class b/lib/json-20180813/javax/vecmath/Matrix3f.class
new file mode 100644
index 0000000..3247101
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Matrix3f.class differ
diff --git a/lib/json-20180813/javax/vecmath/Matrix4d.class b/lib/json-20180813/javax/vecmath/Matrix4d.class
new file mode 100644
index 0000000..2be5439
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Matrix4d.class differ
diff --git a/lib/json-20180813/javax/vecmath/Matrix4f.class b/lib/json-20180813/javax/vecmath/Matrix4f.class
new file mode 100644
index 0000000..4cdc3ee
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Matrix4f.class differ
diff --git a/lib/json-20180813/javax/vecmath/MismatchedSizeException.class b/lib/json-20180813/javax/vecmath/MismatchedSizeException.class
new file mode 100644
index 0000000..28bbf16
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/MismatchedSizeException.class differ
diff --git a/lib/json-20180813/javax/vecmath/Point2d.class b/lib/json-20180813/javax/vecmath/Point2d.class
new file mode 100644
index 0000000..167fa37
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Point2d.class differ
diff --git a/lib/json-20180813/javax/vecmath/Point2f.class b/lib/json-20180813/javax/vecmath/Point2f.class
new file mode 100644
index 0000000..6ee0556
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Point2f.class differ
diff --git a/lib/json-20180813/javax/vecmath/Point3d.class b/lib/json-20180813/javax/vecmath/Point3d.class
new file mode 100644
index 0000000..23f33d8
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Point3d.class differ
diff --git a/lib/json-20180813/javax/vecmath/Point3f.class b/lib/json-20180813/javax/vecmath/Point3f.class
new file mode 100644
index 0000000..add87a6
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Point3f.class differ
diff --git a/lib/json-20180813/javax/vecmath/Point3i.class b/lib/json-20180813/javax/vecmath/Point3i.class
new file mode 100644
index 0000000..f718ae3
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Point3i.class differ
diff --git a/lib/json-20180813/javax/vecmath/Point4d.class b/lib/json-20180813/javax/vecmath/Point4d.class
new file mode 100644
index 0000000..9319cc5
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Point4d.class differ
diff --git a/lib/json-20180813/javax/vecmath/Point4f.class b/lib/json-20180813/javax/vecmath/Point4f.class
new file mode 100644
index 0000000..486f445
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Point4f.class differ
diff --git a/lib/json-20180813/javax/vecmath/Point4i.class b/lib/json-20180813/javax/vecmath/Point4i.class
new file mode 100644
index 0000000..44122dc
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Point4i.class differ
diff --git a/lib/json-20180813/javax/vecmath/Quat4d.class b/lib/json-20180813/javax/vecmath/Quat4d.class
new file mode 100644
index 0000000..179b088
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Quat4d.class differ
diff --git a/lib/json-20180813/javax/vecmath/Quat4f.class b/lib/json-20180813/javax/vecmath/Quat4f.class
new file mode 100644
index 0000000..426da70
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Quat4f.class differ
diff --git a/lib/json-20180813/javax/vecmath/SingularMatrixException.class b/lib/json-20180813/javax/vecmath/SingularMatrixException.class
new file mode 100644
index 0000000..4eb064c
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/SingularMatrixException.class differ
diff --git a/lib/json-20180813/javax/vecmath/TexCoord2f.class b/lib/json-20180813/javax/vecmath/TexCoord2f.class
new file mode 100644
index 0000000..47050d4
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/TexCoord2f.class differ
diff --git a/lib/json-20180813/javax/vecmath/TexCoord3f.class b/lib/json-20180813/javax/vecmath/TexCoord3f.class
new file mode 100644
index 0000000..b069f63
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/TexCoord3f.class differ
diff --git a/lib/json-20180813/javax/vecmath/Tuple2d.class b/lib/json-20180813/javax/vecmath/Tuple2d.class
new file mode 100644
index 0000000..a97f4db
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Tuple2d.class differ
diff --git a/lib/json-20180813/javax/vecmath/Tuple2f.class b/lib/json-20180813/javax/vecmath/Tuple2f.class
new file mode 100644
index 0000000..b4e1b6a
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Tuple2f.class differ
diff --git a/lib/json-20180813/javax/vecmath/Tuple3b.class b/lib/json-20180813/javax/vecmath/Tuple3b.class
new file mode 100644
index 0000000..bda2532
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Tuple3b.class differ
diff --git a/lib/json-20180813/javax/vecmath/Tuple3d.class b/lib/json-20180813/javax/vecmath/Tuple3d.class
new file mode 100644
index 0000000..970e030
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Tuple3d.class differ
diff --git a/lib/json-20180813/javax/vecmath/Tuple3f.class b/lib/json-20180813/javax/vecmath/Tuple3f.class
new file mode 100644
index 0000000..17d3251
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Tuple3f.class differ
diff --git a/lib/json-20180813/javax/vecmath/Tuple3i.class b/lib/json-20180813/javax/vecmath/Tuple3i.class
new file mode 100644
index 0000000..606c98f
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Tuple3i.class differ
diff --git a/lib/json-20180813/javax/vecmath/Tuple4b.class b/lib/json-20180813/javax/vecmath/Tuple4b.class
new file mode 100644
index 0000000..d885421
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Tuple4b.class differ
diff --git a/lib/json-20180813/javax/vecmath/Tuple4d.class b/lib/json-20180813/javax/vecmath/Tuple4d.class
new file mode 100644
index 0000000..22d9017
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Tuple4d.class differ
diff --git a/lib/json-20180813/javax/vecmath/Tuple4f.class b/lib/json-20180813/javax/vecmath/Tuple4f.class
new file mode 100644
index 0000000..1d504c6
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Tuple4f.class differ
diff --git a/lib/json-20180813/javax/vecmath/Tuple4i.class b/lib/json-20180813/javax/vecmath/Tuple4i.class
new file mode 100644
index 0000000..c822ee8
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Tuple4i.class differ
diff --git a/lib/json-20180813/javax/vecmath/VecmathTest.class b/lib/json-20180813/javax/vecmath/VecmathTest.class
new file mode 100644
index 0000000..5e8fd5b
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/VecmathTest.class differ
diff --git a/lib/json-20180813/javax/vecmath/Vector2d.class b/lib/json-20180813/javax/vecmath/Vector2d.class
new file mode 100644
index 0000000..201eae6
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Vector2d.class differ
diff --git a/lib/json-20180813/javax/vecmath/Vector2f.class b/lib/json-20180813/javax/vecmath/Vector2f.class
new file mode 100644
index 0000000..c037ed7
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Vector2f.class differ
diff --git a/lib/json-20180813/javax/vecmath/Vector3d.class b/lib/json-20180813/javax/vecmath/Vector3d.class
new file mode 100644
index 0000000..db1db90
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Vector3d.class differ
diff --git a/lib/json-20180813/javax/vecmath/Vector3f.class b/lib/json-20180813/javax/vecmath/Vector3f.class
new file mode 100644
index 0000000..74e905c
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Vector3f.class differ
diff --git a/lib/json-20180813/javax/vecmath/Vector4d.class b/lib/json-20180813/javax/vecmath/Vector4d.class
new file mode 100644
index 0000000..92f4cfa
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Vector4d.class differ
diff --git a/lib/json-20180813/javax/vecmath/Vector4f.class b/lib/json-20180813/javax/vecmath/Vector4f.class
new file mode 100644
index 0000000..2570275
Binary files /dev/null and b/lib/json-20180813/javax/vecmath/Vector4f.class differ
diff --git a/lib/json-20180813/linux/libdiscord-rpc.so b/lib/json-20180813/linux/libdiscord-rpc.so
new file mode 100644
index 0000000..188d4e8
Binary files /dev/null and b/lib/json-20180813/linux/libdiscord-rpc.so differ
diff --git a/lib/json-20180813/net/arikia/dev/drpc/DiscordEventHandlers$Builder.class b/lib/json-20180813/net/arikia/dev/drpc/DiscordEventHandlers$Builder.class
new file mode 100644
index 0000000..aee8692
Binary files /dev/null and b/lib/json-20180813/net/arikia/dev/drpc/DiscordEventHandlers$Builder.class differ
diff --git a/lib/json-20180813/net/arikia/dev/drpc/DiscordEventHandlers.class b/lib/json-20180813/net/arikia/dev/drpc/DiscordEventHandlers.class
new file mode 100644
index 0000000..9a8e9bb
Binary files /dev/null and b/lib/json-20180813/net/arikia/dev/drpc/DiscordEventHandlers.class differ
diff --git a/lib/json-20180813/net/arikia/dev/drpc/DiscordRPC$DLL.class b/lib/json-20180813/net/arikia/dev/drpc/DiscordRPC$DLL.class
new file mode 100644
index 0000000..32437a0
Binary files /dev/null and b/lib/json-20180813/net/arikia/dev/drpc/DiscordRPC$DLL.class differ
diff --git a/lib/json-20180813/net/arikia/dev/drpc/DiscordRPC$DiscordReply.class b/lib/json-20180813/net/arikia/dev/drpc/DiscordRPC$DiscordReply.class
new file mode 100644
index 0000000..84f7d87
Binary files /dev/null and b/lib/json-20180813/net/arikia/dev/drpc/DiscordRPC$DiscordReply.class differ
diff --git a/lib/json-20180813/net/arikia/dev/drpc/DiscordRPC.class b/lib/json-20180813/net/arikia/dev/drpc/DiscordRPC.class
new file mode 100644
index 0000000..01d27e4
Binary files /dev/null and b/lib/json-20180813/net/arikia/dev/drpc/DiscordRPC.class differ
diff --git a/lib/json-20180813/net/arikia/dev/drpc/DiscordRichPresence$Builder.class b/lib/json-20180813/net/arikia/dev/drpc/DiscordRichPresence$Builder.class
new file mode 100644
index 0000000..8afec3e
Binary files /dev/null and b/lib/json-20180813/net/arikia/dev/drpc/DiscordRichPresence$Builder.class differ
diff --git a/lib/json-20180813/net/arikia/dev/drpc/DiscordRichPresence.class b/lib/json-20180813/net/arikia/dev/drpc/DiscordRichPresence.class
new file mode 100644
index 0000000..b96edd5
Binary files /dev/null and b/lib/json-20180813/net/arikia/dev/drpc/DiscordRichPresence.class differ
diff --git a/lib/json-20180813/net/arikia/dev/drpc/DiscordUser.class b/lib/json-20180813/net/arikia/dev/drpc/DiscordUser.class
new file mode 100644
index 0000000..12ed7e2
Binary files /dev/null and b/lib/json-20180813/net/arikia/dev/drpc/DiscordUser.class differ
diff --git a/lib/json-20180813/net/arikia/dev/drpc/OSUtil.class b/lib/json-20180813/net/arikia/dev/drpc/OSUtil.class
new file mode 100644
index 0000000..f298950
Binary files /dev/null and b/lib/json-20180813/net/arikia/dev/drpc/OSUtil.class differ
diff --git a/lib/json-20180813/net/arikia/dev/drpc/callbacks/DisconnectedCallback.class b/lib/json-20180813/net/arikia/dev/drpc/callbacks/DisconnectedCallback.class
new file mode 100644
index 0000000..e924e58
Binary files /dev/null and b/lib/json-20180813/net/arikia/dev/drpc/callbacks/DisconnectedCallback.class differ
diff --git a/lib/json-20180813/net/arikia/dev/drpc/callbacks/ErroredCallback.class b/lib/json-20180813/net/arikia/dev/drpc/callbacks/ErroredCallback.class
new file mode 100644
index 0000000..c9b7a00
Binary files /dev/null and b/lib/json-20180813/net/arikia/dev/drpc/callbacks/ErroredCallback.class differ
diff --git a/lib/json-20180813/net/arikia/dev/drpc/callbacks/JoinGameCallback.class b/lib/json-20180813/net/arikia/dev/drpc/callbacks/JoinGameCallback.class
new file mode 100644
index 0000000..0556215
Binary files /dev/null and b/lib/json-20180813/net/arikia/dev/drpc/callbacks/JoinGameCallback.class differ
diff --git a/lib/json-20180813/net/arikia/dev/drpc/callbacks/JoinRequestCallback.class b/lib/json-20180813/net/arikia/dev/drpc/callbacks/JoinRequestCallback.class
new file mode 100644
index 0000000..739a5e8
Binary files /dev/null and b/lib/json-20180813/net/arikia/dev/drpc/callbacks/JoinRequestCallback.class differ
diff --git a/lib/json-20180813/net/arikia/dev/drpc/callbacks/ReadyCallback.class b/lib/json-20180813/net/arikia/dev/drpc/callbacks/ReadyCallback.class
new file mode 100644
index 0000000..2985b78
Binary files /dev/null and b/lib/json-20180813/net/arikia/dev/drpc/callbacks/ReadyCallback.class differ
diff --git a/lib/json-20180813/net/arikia/dev/drpc/callbacks/SpectateGameCallback.class b/lib/json-20180813/net/arikia/dev/drpc/callbacks/SpectateGameCallback.class
new file mode 100644
index 0000000..927ca49
Binary files /dev/null and b/lib/json-20180813/net/arikia/dev/drpc/callbacks/SpectateGameCallback.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/ByteOrderMark.class b/lib/json-20180813/org/apache/commons/io/ByteOrderMark.class
new file mode 100644
index 0000000..3633c7e
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/ByteOrderMark.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/ByteOrderParser.class b/lib/json-20180813/org/apache/commons/io/ByteOrderParser.class
new file mode 100644
index 0000000..f12cb16
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/ByteOrderParser.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/Charsets.class b/lib/json-20180813/org/apache/commons/io/Charsets.class
new file mode 100644
index 0000000..bd2a493
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/Charsets.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/CopyUtils.class b/lib/json-20180813/org/apache/commons/io/CopyUtils.class
new file mode 100644
index 0000000..e59bd2c
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/CopyUtils.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/DirectoryWalker$CancelException.class b/lib/json-20180813/org/apache/commons/io/DirectoryWalker$CancelException.class
new file mode 100644
index 0000000..59375b3
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/DirectoryWalker$CancelException.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/DirectoryWalker.class b/lib/json-20180813/org/apache/commons/io/DirectoryWalker.class
new file mode 100644
index 0000000..826046d
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/DirectoryWalker.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/EndianUtils.class b/lib/json-20180813/org/apache/commons/io/EndianUtils.class
new file mode 100644
index 0000000..35b95f5
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/EndianUtils.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/FileCleaner.class b/lib/json-20180813/org/apache/commons/io/FileCleaner.class
new file mode 100644
index 0000000..1847ce9
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/FileCleaner.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/FileCleaningTracker$Reaper.class b/lib/json-20180813/org/apache/commons/io/FileCleaningTracker$Reaper.class
new file mode 100644
index 0000000..0134bc5
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/FileCleaningTracker$Reaper.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/FileCleaningTracker$Tracker.class b/lib/json-20180813/org/apache/commons/io/FileCleaningTracker$Tracker.class
new file mode 100644
index 0000000..76dbc58
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/FileCleaningTracker$Tracker.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/FileCleaningTracker.class b/lib/json-20180813/org/apache/commons/io/FileCleaningTracker.class
new file mode 100644
index 0000000..408469e
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/FileCleaningTracker.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/FileDeleteStrategy$ForceFileDeleteStrategy.class b/lib/json-20180813/org/apache/commons/io/FileDeleteStrategy$ForceFileDeleteStrategy.class
new file mode 100644
index 0000000..702eb55
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/FileDeleteStrategy$ForceFileDeleteStrategy.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/FileDeleteStrategy.class b/lib/json-20180813/org/apache/commons/io/FileDeleteStrategy.class
new file mode 100644
index 0000000..cbf86e4
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/FileDeleteStrategy.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/FileExistsException.class b/lib/json-20180813/org/apache/commons/io/FileExistsException.class
new file mode 100644
index 0000000..959383b
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/FileExistsException.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/FileSystem.class b/lib/json-20180813/org/apache/commons/io/FileSystem.class
new file mode 100644
index 0000000..16605f7
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/FileSystem.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/FileSystemUtils.class b/lib/json-20180813/org/apache/commons/io/FileSystemUtils.class
new file mode 100644
index 0000000..f2adb66
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/FileSystemUtils.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/FileUtils.class b/lib/json-20180813/org/apache/commons/io/FileUtils.class
new file mode 100644
index 0000000..790619b
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/FileUtils.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/FilenameUtils.class b/lib/json-20180813/org/apache/commons/io/FilenameUtils.class
new file mode 100644
index 0000000..6b75aa7
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/FilenameUtils.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/HexDump.class b/lib/json-20180813/org/apache/commons/io/HexDump.class
new file mode 100644
index 0000000..db094db
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/HexDump.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/IOCase.class b/lib/json-20180813/org/apache/commons/io/IOCase.class
new file mode 100644
index 0000000..d79b794
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/IOCase.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/IOExceptionList.class b/lib/json-20180813/org/apache/commons/io/IOExceptionList.class
new file mode 100644
index 0000000..bdc2e6b
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/IOExceptionList.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/IOExceptionWithCause.class b/lib/json-20180813/org/apache/commons/io/IOExceptionWithCause.class
new file mode 100644
index 0000000..a5142f5
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/IOExceptionWithCause.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/IOIndexedException.class b/lib/json-20180813/org/apache/commons/io/IOIndexedException.class
new file mode 100644
index 0000000..1cc1c04
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/IOIndexedException.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/IOUtils.class b/lib/json-20180813/org/apache/commons/io/IOUtils.class
new file mode 100644
index 0000000..8dff8f4
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/IOUtils.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/LineIterator.class b/lib/json-20180813/org/apache/commons/io/LineIterator.class
new file mode 100644
index 0000000..f45bc63
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/LineIterator.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/TaggedIOException.class b/lib/json-20180813/org/apache/commons/io/TaggedIOException.class
new file mode 100644
index 0000000..0b198b4
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/TaggedIOException.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/ThreadMonitor.class b/lib/json-20180813/org/apache/commons/io/ThreadMonitor.class
new file mode 100644
index 0000000..ab20fa2
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/ThreadMonitor.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/comparator/AbstractFileComparator.class b/lib/json-20180813/org/apache/commons/io/comparator/AbstractFileComparator.class
new file mode 100644
index 0000000..2458766
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/comparator/AbstractFileComparator.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/comparator/CompositeFileComparator.class b/lib/json-20180813/org/apache/commons/io/comparator/CompositeFileComparator.class
new file mode 100644
index 0000000..9475672
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/comparator/CompositeFileComparator.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/comparator/DefaultFileComparator.class b/lib/json-20180813/org/apache/commons/io/comparator/DefaultFileComparator.class
new file mode 100644
index 0000000..5c6fe8b
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/comparator/DefaultFileComparator.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/comparator/DirectoryFileComparator.class b/lib/json-20180813/org/apache/commons/io/comparator/DirectoryFileComparator.class
new file mode 100644
index 0000000..7644444
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/comparator/DirectoryFileComparator.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/comparator/ExtensionFileComparator.class b/lib/json-20180813/org/apache/commons/io/comparator/ExtensionFileComparator.class
new file mode 100644
index 0000000..8f6d42d
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/comparator/ExtensionFileComparator.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/comparator/LastModifiedFileComparator.class b/lib/json-20180813/org/apache/commons/io/comparator/LastModifiedFileComparator.class
new file mode 100644
index 0000000..c4c5692
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/comparator/LastModifiedFileComparator.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/comparator/NameFileComparator.class b/lib/json-20180813/org/apache/commons/io/comparator/NameFileComparator.class
new file mode 100644
index 0000000..fadb89a
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/comparator/NameFileComparator.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/comparator/PathFileComparator.class b/lib/json-20180813/org/apache/commons/io/comparator/PathFileComparator.class
new file mode 100644
index 0000000..0f32b85
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/comparator/PathFileComparator.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/comparator/ReverseFileComparator.class b/lib/json-20180813/org/apache/commons/io/comparator/ReverseFileComparator.class
new file mode 100644
index 0000000..a0983e2
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/comparator/ReverseFileComparator.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/comparator/SizeFileComparator.class b/lib/json-20180813/org/apache/commons/io/comparator/SizeFileComparator.class
new file mode 100644
index 0000000..c3f39cb
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/comparator/SizeFileComparator.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/AccumulatorPathVisitor.class b/lib/json-20180813/org/apache/commons/io/file/AccumulatorPathVisitor.class
new file mode 100644
index 0000000..ef20e60
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/AccumulatorPathVisitor.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/CleaningPathVisitor.class b/lib/json-20180813/org/apache/commons/io/file/CleaningPathVisitor.class
new file mode 100644
index 0000000..da70a35
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/CleaningPathVisitor.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/CopyDirectoryVisitor.class b/lib/json-20180813/org/apache/commons/io/file/CopyDirectoryVisitor.class
new file mode 100644
index 0000000..ce9e208
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/CopyDirectoryVisitor.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/Counters$1.class b/lib/json-20180813/org/apache/commons/io/file/Counters$1.class
new file mode 100644
index 0000000..3c5c5ff
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/Counters$1.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/Counters$AbstractPathCounters.class b/lib/json-20180813/org/apache/commons/io/file/Counters$AbstractPathCounters.class
new file mode 100644
index 0000000..7e0ac70
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/Counters$AbstractPathCounters.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/Counters$BigIntegerCounter.class b/lib/json-20180813/org/apache/commons/io/file/Counters$BigIntegerCounter.class
new file mode 100644
index 0000000..69b9a9b
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/Counters$BigIntegerCounter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/Counters$BigIntegerPathCounters.class b/lib/json-20180813/org/apache/commons/io/file/Counters$BigIntegerPathCounters.class
new file mode 100644
index 0000000..95c8667
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/Counters$BigIntegerPathCounters.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/Counters$Counter.class b/lib/json-20180813/org/apache/commons/io/file/Counters$Counter.class
new file mode 100644
index 0000000..e7e3ca6
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/Counters$Counter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/Counters$LongCounter.class b/lib/json-20180813/org/apache/commons/io/file/Counters$LongCounter.class
new file mode 100644
index 0000000..675c859
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/Counters$LongCounter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/Counters$LongPathCounters.class b/lib/json-20180813/org/apache/commons/io/file/Counters$LongPathCounters.class
new file mode 100644
index 0000000..25da033
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/Counters$LongPathCounters.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/Counters$PathCounters.class b/lib/json-20180813/org/apache/commons/io/file/Counters$PathCounters.class
new file mode 100644
index 0000000..4756410
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/Counters$PathCounters.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/Counters.class b/lib/json-20180813/org/apache/commons/io/file/Counters.class
new file mode 100644
index 0000000..7d74663
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/Counters.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/CountingPathVisitor.class b/lib/json-20180813/org/apache/commons/io/file/CountingPathVisitor.class
new file mode 100644
index 0000000..4e4e359
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/CountingPathVisitor.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/DeleteOption.class b/lib/json-20180813/org/apache/commons/io/file/DeleteOption.class
new file mode 100644
index 0000000..ee97e19
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/DeleteOption.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/DeletingPathVisitor.class b/lib/json-20180813/org/apache/commons/io/file/DeletingPathVisitor.class
new file mode 100644
index 0000000..63a1f4e
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/DeletingPathVisitor.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/PathUtils$1.class b/lib/json-20180813/org/apache/commons/io/file/PathUtils$1.class
new file mode 100644
index 0000000..b3d0492
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/PathUtils$1.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/PathUtils$RelativeSortedPaths.class b/lib/json-20180813/org/apache/commons/io/file/PathUtils$RelativeSortedPaths.class
new file mode 100644
index 0000000..0dc21e7
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/PathUtils$RelativeSortedPaths.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/PathUtils.class b/lib/json-20180813/org/apache/commons/io/file/PathUtils.class
new file mode 100644
index 0000000..75ff529
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/PathUtils.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/SimplePathVisitor.class b/lib/json-20180813/org/apache/commons/io/file/SimplePathVisitor.class
new file mode 100644
index 0000000..3373457
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/SimplePathVisitor.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/file/StandardDeleteOption.class b/lib/json-20180813/org/apache/commons/io/file/StandardDeleteOption.class
new file mode 100644
index 0000000..64106ec
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/file/StandardDeleteOption.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/AbstractFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/AbstractFileFilter.class
new file mode 100644
index 0000000..2846782
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/AbstractFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/AgeFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/AgeFileFilter.class
new file mode 100644
index 0000000..325f019
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/AgeFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/AndFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/AndFileFilter.class
new file mode 100644
index 0000000..e998ffe
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/AndFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/CanExecuteFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/CanExecuteFileFilter.class
new file mode 100644
index 0000000..30d2e8d
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/CanExecuteFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/CanReadFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/CanReadFileFilter.class
new file mode 100644
index 0000000..9911ad7
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/CanReadFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/CanWriteFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/CanWriteFileFilter.class
new file mode 100644
index 0000000..3fd4e21
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/CanWriteFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/ConditionalFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/ConditionalFileFilter.class
new file mode 100644
index 0000000..5d865d8
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/ConditionalFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/DelegateFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/DelegateFileFilter.class
new file mode 100644
index 0000000..c220f99
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/DelegateFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/DirectoryFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/DirectoryFileFilter.class
new file mode 100644
index 0000000..cf8b965
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/DirectoryFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/EmptyFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/EmptyFileFilter.class
new file mode 100644
index 0000000..020a831
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/EmptyFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/FalseFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/FalseFileFilter.class
new file mode 100644
index 0000000..4c80a89
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/FalseFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/FileFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/FileFileFilter.class
new file mode 100644
index 0000000..0e06f68
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/FileFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/FileFilterUtils.class b/lib/json-20180813/org/apache/commons/io/filefilter/FileFilterUtils.class
new file mode 100644
index 0000000..81ca638
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/FileFilterUtils.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/HiddenFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/HiddenFileFilter.class
new file mode 100644
index 0000000..c052b6b
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/HiddenFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/IOFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/IOFileFilter.class
new file mode 100644
index 0000000..eee0324
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/IOFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/MagicNumberFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/MagicNumberFileFilter.class
new file mode 100644
index 0000000..e450d7a
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/MagicNumberFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/NameFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/NameFileFilter.class
new file mode 100644
index 0000000..2a79b9d
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/NameFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/NotFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/NotFileFilter.class
new file mode 100644
index 0000000..4b37c15
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/NotFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/OrFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/OrFileFilter.class
new file mode 100644
index 0000000..6d4062c
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/OrFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/PrefixFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/PrefixFileFilter.class
new file mode 100644
index 0000000..23f7d57
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/PrefixFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/RegexFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/RegexFileFilter.class
new file mode 100644
index 0000000..c6a2830
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/RegexFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/SizeFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/SizeFileFilter.class
new file mode 100644
index 0000000..c34e27e
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/SizeFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/SuffixFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/SuffixFileFilter.class
new file mode 100644
index 0000000..40216cc
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/SuffixFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/TrueFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/TrueFileFilter.class
new file mode 100644
index 0000000..f96dec3
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/TrueFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/WildcardFileFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/WildcardFileFilter.class
new file mode 100644
index 0000000..a136420
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/WildcardFileFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/filefilter/WildcardFilter.class b/lib/json-20180813/org/apache/commons/io/filefilter/WildcardFilter.class
new file mode 100644
index 0000000..d9e531c
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/filefilter/WildcardFilter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/function/IOConsumer.class b/lib/json-20180813/org/apache/commons/io/function/IOConsumer.class
new file mode 100644
index 0000000..878cef2
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/function/IOConsumer.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/function/IOFunction.class b/lib/json-20180813/org/apache/commons/io/function/IOFunction.class
new file mode 100644
index 0000000..6352593
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/function/IOFunction.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/function/IOSupplier.class b/lib/json-20180813/org/apache/commons/io/function/IOSupplier.class
new file mode 100644
index 0000000..1e77a70
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/function/IOSupplier.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/AbstractCharacterFilterReader.class b/lib/json-20180813/org/apache/commons/io/input/AbstractCharacterFilterReader.class
new file mode 100644
index 0000000..93832c1
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/AbstractCharacterFilterReader.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/AutoCloseInputStream.class b/lib/json-20180813/org/apache/commons/io/input/AutoCloseInputStream.class
new file mode 100644
index 0000000..cdede8a
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/AutoCloseInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/BOMInputStream.class b/lib/json-20180813/org/apache/commons/io/input/BOMInputStream.class
new file mode 100644
index 0000000..ac88830
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/BOMInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/BoundedInputStream.class b/lib/json-20180813/org/apache/commons/io/input/BoundedInputStream.class
new file mode 100644
index 0000000..80bb72b
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/BoundedInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/BoundedReader.class b/lib/json-20180813/org/apache/commons/io/input/BoundedReader.class
new file mode 100644
index 0000000..aedace8
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/BoundedReader.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/BrokenInputStream.class b/lib/json-20180813/org/apache/commons/io/input/BrokenInputStream.class
new file mode 100644
index 0000000..290eef9
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/BrokenInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/BrokenReader.class b/lib/json-20180813/org/apache/commons/io/input/BrokenReader.class
new file mode 100644
index 0000000..8c6ed79
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/BrokenReader.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/CharSequenceInputStream.class b/lib/json-20180813/org/apache/commons/io/input/CharSequenceInputStream.class
new file mode 100644
index 0000000..3ec0042
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/CharSequenceInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/CharSequenceReader.class b/lib/json-20180813/org/apache/commons/io/input/CharSequenceReader.class
new file mode 100644
index 0000000..de197f7
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/CharSequenceReader.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/CharacterFilterReader.class b/lib/json-20180813/org/apache/commons/io/input/CharacterFilterReader.class
new file mode 100644
index 0000000..4bbfe7c
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/CharacterFilterReader.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/CharacterSetFilterReader.class b/lib/json-20180813/org/apache/commons/io/input/CharacterSetFilterReader.class
new file mode 100644
index 0000000..718f5bc
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/CharacterSetFilterReader.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/CircularInputStream.class b/lib/json-20180813/org/apache/commons/io/input/CircularInputStream.class
new file mode 100644
index 0000000..db92864
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/CircularInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/ClassLoaderObjectInputStream.class b/lib/json-20180813/org/apache/commons/io/input/ClassLoaderObjectInputStream.class
new file mode 100644
index 0000000..a71a72b
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/ClassLoaderObjectInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/CloseShieldInputStream.class b/lib/json-20180813/org/apache/commons/io/input/CloseShieldInputStream.class
new file mode 100644
index 0000000..585f7b5
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/CloseShieldInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/CloseShieldReader.class b/lib/json-20180813/org/apache/commons/io/input/CloseShieldReader.class
new file mode 100644
index 0000000..c2ae20e
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/CloseShieldReader.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/ClosedInputStream.class b/lib/json-20180813/org/apache/commons/io/input/ClosedInputStream.class
new file mode 100644
index 0000000..ab95a34
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/ClosedInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/ClosedReader.class b/lib/json-20180813/org/apache/commons/io/input/ClosedReader.class
new file mode 100644
index 0000000..25aaaaa
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/ClosedReader.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/CountingInputStream.class b/lib/json-20180813/org/apache/commons/io/input/CountingInputStream.class
new file mode 100644
index 0000000..e01e694
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/CountingInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/DemuxInputStream.class b/lib/json-20180813/org/apache/commons/io/input/DemuxInputStream.class
new file mode 100644
index 0000000..82888e1
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/DemuxInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/InfiniteCircularInputStream.class b/lib/json-20180813/org/apache/commons/io/input/InfiniteCircularInputStream.class
new file mode 100644
index 0000000..932abb8
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/InfiniteCircularInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/MarkShieldInputStream.class b/lib/json-20180813/org/apache/commons/io/input/MarkShieldInputStream.class
new file mode 100644
index 0000000..223ffca
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/MarkShieldInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/MessageDigestCalculatingInputStream$MessageDigestMaintainingObserver.class b/lib/json-20180813/org/apache/commons/io/input/MessageDigestCalculatingInputStream$MessageDigestMaintainingObserver.class
new file mode 100644
index 0000000..1510e51
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/MessageDigestCalculatingInputStream$MessageDigestMaintainingObserver.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/MessageDigestCalculatingInputStream.class b/lib/json-20180813/org/apache/commons/io/input/MessageDigestCalculatingInputStream.class
new file mode 100644
index 0000000..30b6a03
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/MessageDigestCalculatingInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/NullInputStream.class b/lib/json-20180813/org/apache/commons/io/input/NullInputStream.class
new file mode 100644
index 0000000..67d14fc
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/NullInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/NullReader.class b/lib/json-20180813/org/apache/commons/io/input/NullReader.class
new file mode 100644
index 0000000..ea19274
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/NullReader.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/ObservableInputStream$Observer.class b/lib/json-20180813/org/apache/commons/io/input/ObservableInputStream$Observer.class
new file mode 100644
index 0000000..a68591d
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/ObservableInputStream$Observer.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/ObservableInputStream.class b/lib/json-20180813/org/apache/commons/io/input/ObservableInputStream.class
new file mode 100644
index 0000000..89a9506
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/ObservableInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/ProxyInputStream.class b/lib/json-20180813/org/apache/commons/io/input/ProxyInputStream.class
new file mode 100644
index 0000000..31001e8
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/ProxyInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/ProxyReader.class b/lib/json-20180813/org/apache/commons/io/input/ProxyReader.class
new file mode 100644
index 0000000..8404d40
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/ProxyReader.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/RandomAccessFileInputStream.class b/lib/json-20180813/org/apache/commons/io/input/RandomAccessFileInputStream.class
new file mode 100644
index 0000000..a8997f3
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/RandomAccessFileInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/ReaderInputStream.class b/lib/json-20180813/org/apache/commons/io/input/ReaderInputStream.class
new file mode 100644
index 0000000..2e4ae2f
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/ReaderInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/ReversedLinesFileReader$1.class b/lib/json-20180813/org/apache/commons/io/input/ReversedLinesFileReader$1.class
new file mode 100644
index 0000000..f3fe8d4
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/ReversedLinesFileReader$1.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/ReversedLinesFileReader$FilePart.class b/lib/json-20180813/org/apache/commons/io/input/ReversedLinesFileReader$FilePart.class
new file mode 100644
index 0000000..5d279e6
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/ReversedLinesFileReader$FilePart.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/ReversedLinesFileReader.class b/lib/json-20180813/org/apache/commons/io/input/ReversedLinesFileReader.class
new file mode 100644
index 0000000..d88150f
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/ReversedLinesFileReader.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/SequenceReader.class b/lib/json-20180813/org/apache/commons/io/input/SequenceReader.class
new file mode 100644
index 0000000..ff1ea1c
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/SequenceReader.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/SwappedDataInputStream.class b/lib/json-20180813/org/apache/commons/io/input/SwappedDataInputStream.class
new file mode 100644
index 0000000..c9cee99
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/SwappedDataInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/TaggedInputStream.class b/lib/json-20180813/org/apache/commons/io/input/TaggedInputStream.class
new file mode 100644
index 0000000..2266bcd
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/TaggedInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/TaggedReader.class b/lib/json-20180813/org/apache/commons/io/input/TaggedReader.class
new file mode 100644
index 0000000..434b5c3
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/TaggedReader.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/Tailer.class b/lib/json-20180813/org/apache/commons/io/input/Tailer.class
new file mode 100644
index 0000000..aba674a
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/Tailer.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/TailerListener.class b/lib/json-20180813/org/apache/commons/io/input/TailerListener.class
new file mode 100644
index 0000000..780cd14
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/TailerListener.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/TailerListenerAdapter.class b/lib/json-20180813/org/apache/commons/io/input/TailerListenerAdapter.class
new file mode 100644
index 0000000..1a5dc5c
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/TailerListenerAdapter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/TeeInputStream.class b/lib/json-20180813/org/apache/commons/io/input/TeeInputStream.class
new file mode 100644
index 0000000..dc54c8e
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/TeeInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/TeeReader.class b/lib/json-20180813/org/apache/commons/io/input/TeeReader.class
new file mode 100644
index 0000000..5acb53c
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/TeeReader.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/UnixLineEndingInputStream.class b/lib/json-20180813/org/apache/commons/io/input/UnixLineEndingInputStream.class
new file mode 100644
index 0000000..99b7977
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/UnixLineEndingInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/UnsynchronizedByteArrayInputStream.class b/lib/json-20180813/org/apache/commons/io/input/UnsynchronizedByteArrayInputStream.class
new file mode 100644
index 0000000..7f720fa
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/UnsynchronizedByteArrayInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/WindowsLineEndingInputStream.class b/lib/json-20180813/org/apache/commons/io/input/WindowsLineEndingInputStream.class
new file mode 100644
index 0000000..cf04d7c
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/WindowsLineEndingInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/XmlStreamReader.class b/lib/json-20180813/org/apache/commons/io/input/XmlStreamReader.class
new file mode 100644
index 0000000..9395ea5
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/XmlStreamReader.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/XmlStreamReaderException.class b/lib/json-20180813/org/apache/commons/io/input/XmlStreamReaderException.class
new file mode 100644
index 0000000..fceac61
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/XmlStreamReaderException.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/buffer/CircularBufferInputStream.class b/lib/json-20180813/org/apache/commons/io/input/buffer/CircularBufferInputStream.class
new file mode 100644
index 0000000..2ca3cc2
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/buffer/CircularBufferInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/buffer/CircularByteBuffer.class b/lib/json-20180813/org/apache/commons/io/input/buffer/CircularByteBuffer.class
new file mode 100644
index 0000000..9358234
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/buffer/CircularByteBuffer.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/input/buffer/PeekableInputStream.class b/lib/json-20180813/org/apache/commons/io/input/buffer/PeekableInputStream.class
new file mode 100644
index 0000000..3b1d782
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/input/buffer/PeekableInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/monitor/FileAlterationListener.class b/lib/json-20180813/org/apache/commons/io/monitor/FileAlterationListener.class
new file mode 100644
index 0000000..b9cb738
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/monitor/FileAlterationListener.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/monitor/FileAlterationListenerAdaptor.class b/lib/json-20180813/org/apache/commons/io/monitor/FileAlterationListenerAdaptor.class
new file mode 100644
index 0000000..81b7283
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/monitor/FileAlterationListenerAdaptor.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/monitor/FileAlterationMonitor.class b/lib/json-20180813/org/apache/commons/io/monitor/FileAlterationMonitor.class
new file mode 100644
index 0000000..feaf860
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/monitor/FileAlterationMonitor.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/monitor/FileAlterationObserver.class b/lib/json-20180813/org/apache/commons/io/monitor/FileAlterationObserver.class
new file mode 100644
index 0000000..16d8b01
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/monitor/FileAlterationObserver.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/monitor/FileEntry.class b/lib/json-20180813/org/apache/commons/io/monitor/FileEntry.class
new file mode 100644
index 0000000..13dcb93
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/monitor/FileEntry.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/AbstractByteArrayOutputStream$InputStreamConstructor.class b/lib/json-20180813/org/apache/commons/io/output/AbstractByteArrayOutputStream$InputStreamConstructor.class
new file mode 100644
index 0000000..1b9c7da
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/AbstractByteArrayOutputStream$InputStreamConstructor.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/AbstractByteArrayOutputStream.class b/lib/json-20180813/org/apache/commons/io/output/AbstractByteArrayOutputStream.class
new file mode 100644
index 0000000..475d1c3
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/AbstractByteArrayOutputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/AppendableOutputStream.class b/lib/json-20180813/org/apache/commons/io/output/AppendableOutputStream.class
new file mode 100644
index 0000000..6036cfb
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/AppendableOutputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/AppendableWriter.class b/lib/json-20180813/org/apache/commons/io/output/AppendableWriter.class
new file mode 100644
index 0000000..3a1e71d
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/AppendableWriter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/BrokenOutputStream.class b/lib/json-20180813/org/apache/commons/io/output/BrokenOutputStream.class
new file mode 100644
index 0000000..9e40ece
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/BrokenOutputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/BrokenWriter.class b/lib/json-20180813/org/apache/commons/io/output/BrokenWriter.class
new file mode 100644
index 0000000..836b8ab
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/BrokenWriter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/ByteArrayOutputStream.class b/lib/json-20180813/org/apache/commons/io/output/ByteArrayOutputStream.class
new file mode 100644
index 0000000..c670275
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/ByteArrayOutputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/ChunkedOutputStream.class b/lib/json-20180813/org/apache/commons/io/output/ChunkedOutputStream.class
new file mode 100644
index 0000000..a52f24b
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/ChunkedOutputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/ChunkedWriter.class b/lib/json-20180813/org/apache/commons/io/output/ChunkedWriter.class
new file mode 100644
index 0000000..41ef7ac
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/ChunkedWriter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/CloseShieldOutputStream.class b/lib/json-20180813/org/apache/commons/io/output/CloseShieldOutputStream.class
new file mode 100644
index 0000000..9021563
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/CloseShieldOutputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/CloseShieldWriter.class b/lib/json-20180813/org/apache/commons/io/output/CloseShieldWriter.class
new file mode 100644
index 0000000..17f1423
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/CloseShieldWriter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/ClosedOutputStream.class b/lib/json-20180813/org/apache/commons/io/output/ClosedOutputStream.class
new file mode 100644
index 0000000..d778c82
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/ClosedOutputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/ClosedWriter.class b/lib/json-20180813/org/apache/commons/io/output/ClosedWriter.class
new file mode 100644
index 0000000..16a4212
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/ClosedWriter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/CountingOutputStream.class b/lib/json-20180813/org/apache/commons/io/output/CountingOutputStream.class
new file mode 100644
index 0000000..af22a3e
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/CountingOutputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/DeferredFileOutputStream.class b/lib/json-20180813/org/apache/commons/io/output/DeferredFileOutputStream.class
new file mode 100644
index 0000000..fa89089
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/DeferredFileOutputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/DemuxOutputStream.class b/lib/json-20180813/org/apache/commons/io/output/DemuxOutputStream.class
new file mode 100644
index 0000000..3710924
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/DemuxOutputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/FileWriterWithEncoding.class b/lib/json-20180813/org/apache/commons/io/output/FileWriterWithEncoding.class
new file mode 100644
index 0000000..f6b6e98
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/FileWriterWithEncoding.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/FilterCollectionWriter.class b/lib/json-20180813/org/apache/commons/io/output/FilterCollectionWriter.class
new file mode 100644
index 0000000..dac0dbb
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/FilterCollectionWriter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/LockableFileWriter.class b/lib/json-20180813/org/apache/commons/io/output/LockableFileWriter.class
new file mode 100644
index 0000000..6320745
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/LockableFileWriter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/NullAppendable.class b/lib/json-20180813/org/apache/commons/io/output/NullAppendable.class
new file mode 100644
index 0000000..bc6b313
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/NullAppendable.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/NullOutputStream.class b/lib/json-20180813/org/apache/commons/io/output/NullOutputStream.class
new file mode 100644
index 0000000..52546f2
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/NullOutputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/NullPrintStream.class b/lib/json-20180813/org/apache/commons/io/output/NullPrintStream.class
new file mode 100644
index 0000000..cff4c85
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/NullPrintStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/NullWriter.class b/lib/json-20180813/org/apache/commons/io/output/NullWriter.class
new file mode 100644
index 0000000..59661ae
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/NullWriter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/ProxyCollectionWriter.class b/lib/json-20180813/org/apache/commons/io/output/ProxyCollectionWriter.class
new file mode 100644
index 0000000..79fd643
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/ProxyCollectionWriter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/ProxyOutputStream.class b/lib/json-20180813/org/apache/commons/io/output/ProxyOutputStream.class
new file mode 100644
index 0000000..e9011bd
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/ProxyOutputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/ProxyWriter.class b/lib/json-20180813/org/apache/commons/io/output/ProxyWriter.class
new file mode 100644
index 0000000..105909c
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/ProxyWriter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/StringBuilderWriter.class b/lib/json-20180813/org/apache/commons/io/output/StringBuilderWriter.class
new file mode 100644
index 0000000..7450b4e
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/StringBuilderWriter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/TaggedOutputStream.class b/lib/json-20180813/org/apache/commons/io/output/TaggedOutputStream.class
new file mode 100644
index 0000000..9720988
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/TaggedOutputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/TaggedWriter.class b/lib/json-20180813/org/apache/commons/io/output/TaggedWriter.class
new file mode 100644
index 0000000..f7b06ec
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/TaggedWriter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/TeeOutputStream.class b/lib/json-20180813/org/apache/commons/io/output/TeeOutputStream.class
new file mode 100644
index 0000000..f790cfc
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/TeeOutputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/TeeWriter.class b/lib/json-20180813/org/apache/commons/io/output/TeeWriter.class
new file mode 100644
index 0000000..8c34cef
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/TeeWriter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/ThresholdingOutputStream.class b/lib/json-20180813/org/apache/commons/io/output/ThresholdingOutputStream.class
new file mode 100644
index 0000000..f66d5d7
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/ThresholdingOutputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/UnsynchronizedByteArrayOutputStream.class b/lib/json-20180813/org/apache/commons/io/output/UnsynchronizedByteArrayOutputStream.class
new file mode 100644
index 0000000..5bbd246
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/UnsynchronizedByteArrayOutputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/WriterOutputStream.class b/lib/json-20180813/org/apache/commons/io/output/WriterOutputStream.class
new file mode 100644
index 0000000..6ef49b0
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/WriterOutputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/output/XmlStreamWriter.class b/lib/json-20180813/org/apache/commons/io/output/XmlStreamWriter.class
new file mode 100644
index 0000000..8028d43
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/output/XmlStreamWriter.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/serialization/ClassNameMatcher.class b/lib/json-20180813/org/apache/commons/io/serialization/ClassNameMatcher.class
new file mode 100644
index 0000000..201a1fe
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/serialization/ClassNameMatcher.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/serialization/FullClassNameMatcher.class b/lib/json-20180813/org/apache/commons/io/serialization/FullClassNameMatcher.class
new file mode 100644
index 0000000..94e21c9
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/serialization/FullClassNameMatcher.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/serialization/RegexpClassNameMatcher.class b/lib/json-20180813/org/apache/commons/io/serialization/RegexpClassNameMatcher.class
new file mode 100644
index 0000000..7b491df
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/serialization/RegexpClassNameMatcher.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/serialization/ValidatingObjectInputStream.class b/lib/json-20180813/org/apache/commons/io/serialization/ValidatingObjectInputStream.class
new file mode 100644
index 0000000..a41c6f3
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/serialization/ValidatingObjectInputStream.class differ
diff --git a/lib/json-20180813/org/apache/commons/io/serialization/WildcardClassNameMatcher.class b/lib/json-20180813/org/apache/commons/io/serialization/WildcardClassNameMatcher.class
new file mode 100644
index 0000000..bce5112
Binary files /dev/null and b/lib/json-20180813/org/apache/commons/io/serialization/WildcardClassNameMatcher.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/Flow.class b/lib/json-20180813/org/intellij/lang/annotations/Flow.class
new file mode 100644
index 0000000..e734343
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/Flow.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/Identifier.class b/lib/json-20180813/org/intellij/lang/annotations/Identifier.class
new file mode 100644
index 0000000..f379388
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/Identifier.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$AdjustableOrientation.class b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$AdjustableOrientation.class
new file mode 100644
index 0000000..bf093aa
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$AdjustableOrientation.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$BoxLayoutAxis.class b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$BoxLayoutAxis.class
new file mode 100644
index 0000000..5ac0726
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$BoxLayoutAxis.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$CalendarMonth.class b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$CalendarMonth.class
new file mode 100644
index 0000000..b2f9312
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$CalendarMonth.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$CursorType.class b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$CursorType.class
new file mode 100644
index 0000000..08dea10
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$CursorType.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$FlowLayoutAlignment.class b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$FlowLayoutAlignment.class
new file mode 100644
index 0000000..da4d062
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$FlowLayoutAlignment.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$FontStyle.class b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$FontStyle.class
new file mode 100644
index 0000000..205e10e
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$FontStyle.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$HorizontalAlignment.class b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$HorizontalAlignment.class
new file mode 100644
index 0000000..878e127
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$HorizontalAlignment.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$HorizontalScrollBarPolicy.class b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$HorizontalScrollBarPolicy.class
new file mode 100644
index 0000000..73a1141
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$HorizontalScrollBarPolicy.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$InputEventMask.class b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$InputEventMask.class
new file mode 100644
index 0000000..b6d1523
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$InputEventMask.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$ListSelectionMode.class b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$ListSelectionMode.class
new file mode 100644
index 0000000..0465edd
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$ListSelectionMode.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$PatternFlags.class b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$PatternFlags.class
new file mode 100644
index 0000000..2dd605e
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$PatternFlags.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$TabLayoutPolicy.class b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$TabLayoutPolicy.class
new file mode 100644
index 0000000..ae44af4
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$TabLayoutPolicy.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$TabPlacement.class b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$TabPlacement.class
new file mode 100644
index 0000000..a2da7dc
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$TabPlacement.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$TitledBorderJustification.class b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$TitledBorderJustification.class
new file mode 100644
index 0000000..2685535
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$TitledBorderJustification.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$TitledBorderTitlePosition.class b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$TitledBorderTitlePosition.class
new file mode 100644
index 0000000..ec0549c
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$TitledBorderTitlePosition.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$TreeSelectionMode.class b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$TreeSelectionMode.class
new file mode 100644
index 0000000..0a34429
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$TreeSelectionMode.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$VerticalScrollBarPolicy.class b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$VerticalScrollBarPolicy.class
new file mode 100644
index 0000000..15d2a0c
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants$VerticalScrollBarPolicy.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/JdkConstants.class b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants.class
new file mode 100644
index 0000000..866d8ba
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/JdkConstants.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/Language.class b/lib/json-20180813/org/intellij/lang/annotations/Language.class
new file mode 100644
index 0000000..a4df9a6
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/Language.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/MagicConstant.class b/lib/json-20180813/org/intellij/lang/annotations/MagicConstant.class
new file mode 100644
index 0000000..875ec46
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/MagicConstant.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/Pattern.class b/lib/json-20180813/org/intellij/lang/annotations/Pattern.class
new file mode 100644
index 0000000..93f05d3
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/Pattern.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/PrintFormat.class b/lib/json-20180813/org/intellij/lang/annotations/PrintFormat.class
new file mode 100644
index 0000000..cf10ed5
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/PrintFormat.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/PrintFormatPattern.class b/lib/json-20180813/org/intellij/lang/annotations/PrintFormatPattern.class
new file mode 100644
index 0000000..0149729
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/PrintFormatPattern.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/RegExp.class b/lib/json-20180813/org/intellij/lang/annotations/RegExp.class
new file mode 100644
index 0000000..5ee1d2f
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/RegExp.class differ
diff --git a/lib/json-20180813/org/intellij/lang/annotations/Subst.class b/lib/json-20180813/org/intellij/lang/annotations/Subst.class
new file mode 100644
index 0000000..81557e9
Binary files /dev/null and b/lib/json-20180813/org/intellij/lang/annotations/Subst.class differ
diff --git a/lib/json-20180813/org/jetbrains/annotations/Async$Execute.class b/lib/json-20180813/org/jetbrains/annotations/Async$Execute.class
new file mode 100644
index 0000000..4f3d178
Binary files /dev/null and b/lib/json-20180813/org/jetbrains/annotations/Async$Execute.class differ
diff --git a/lib/json-20180813/org/jetbrains/annotations/Async$Schedule.class b/lib/json-20180813/org/jetbrains/annotations/Async$Schedule.class
new file mode 100644
index 0000000..719bdef
Binary files /dev/null and b/lib/json-20180813/org/jetbrains/annotations/Async$Schedule.class differ
diff --git a/lib/json-20180813/org/jetbrains/annotations/Async.class b/lib/json-20180813/org/jetbrains/annotations/Async.class
new file mode 100644
index 0000000..cf52954
Binary files /dev/null and b/lib/json-20180813/org/jetbrains/annotations/Async.class differ
diff --git a/lib/json-20180813/org/jetbrains/annotations/Contract.class b/lib/json-20180813/org/jetbrains/annotations/Contract.class
new file mode 100644
index 0000000..490bab2
Binary files /dev/null and b/lib/json-20180813/org/jetbrains/annotations/Contract.class differ
diff --git a/lib/json-20180813/org/jetbrains/annotations/Nls$Capitalization.class b/lib/json-20180813/org/jetbrains/annotations/Nls$Capitalization.class
new file mode 100644
index 0000000..ad1f2f4
Binary files /dev/null and b/lib/json-20180813/org/jetbrains/annotations/Nls$Capitalization.class differ
diff --git a/lib/json-20180813/org/jetbrains/annotations/Nls.class b/lib/json-20180813/org/jetbrains/annotations/Nls.class
new file mode 100644
index 0000000..6eb87bd
Binary files /dev/null and b/lib/json-20180813/org/jetbrains/annotations/Nls.class differ
diff --git a/lib/json-20180813/org/jetbrains/annotations/NonNls.class b/lib/json-20180813/org/jetbrains/annotations/NonNls.class
new file mode 100644
index 0000000..a066fad
Binary files /dev/null and b/lib/json-20180813/org/jetbrains/annotations/NonNls.class differ
diff --git a/lib/json-20180813/org/jetbrains/annotations/NotNull.class b/lib/json-20180813/org/jetbrains/annotations/NotNull.class
new file mode 100644
index 0000000..b4efa69
Binary files /dev/null and b/lib/json-20180813/org/jetbrains/annotations/NotNull.class differ
diff --git a/lib/json-20180813/org/jetbrains/annotations/Nullable.class b/lib/json-20180813/org/jetbrains/annotations/Nullable.class
new file mode 100644
index 0000000..9df3526
Binary files /dev/null and b/lib/json-20180813/org/jetbrains/annotations/Nullable.class differ
diff --git a/lib/json-20180813/org/jetbrains/annotations/PropertyKey.class b/lib/json-20180813/org/jetbrains/annotations/PropertyKey.class
new file mode 100644
index 0000000..de9ccad
Binary files /dev/null and b/lib/json-20180813/org/jetbrains/annotations/PropertyKey.class differ
diff --git a/lib/json-20180813/org/jetbrains/annotations/TestOnly.class b/lib/json-20180813/org/jetbrains/annotations/TestOnly.class
new file mode 100644
index 0000000..8bda70d
Binary files /dev/null and b/lib/json-20180813/org/jetbrains/annotations/TestOnly.class differ
diff --git a/lib/json-20180813/org/json/CDL.class b/lib/json-20180813/org/json/CDL.class
new file mode 100644
index 0000000..e03b345
Binary files /dev/null and b/lib/json-20180813/org/json/CDL.class differ
diff --git a/lib/json-20180813/org/json/Cookie.class b/lib/json-20180813/org/json/Cookie.class
new file mode 100644
index 0000000..6bd0256
Binary files /dev/null and b/lib/json-20180813/org/json/Cookie.class differ
diff --git a/lib/json-20180813/org/json/CookieList.class b/lib/json-20180813/org/json/CookieList.class
new file mode 100644
index 0000000..9f95e46
Binary files /dev/null and b/lib/json-20180813/org/json/CookieList.class differ
diff --git a/lib/json-20180813/org/json/HTTP.class b/lib/json-20180813/org/json/HTTP.class
new file mode 100644
index 0000000..630c6bb
Binary files /dev/null and b/lib/json-20180813/org/json/HTTP.class differ
diff --git a/lib/json-20180813/org/json/HTTPTokener.class b/lib/json-20180813/org/json/HTTPTokener.class
new file mode 100644
index 0000000..53e0c33
Binary files /dev/null and b/lib/json-20180813/org/json/HTTPTokener.class differ
diff --git a/lib/json-20180813/org/json/JSONArray.class b/lib/json-20180813/org/json/JSONArray.class
new file mode 100644
index 0000000..5d16fb8
Binary files /dev/null and b/lib/json-20180813/org/json/JSONArray.class differ
diff --git a/lib/json-20180813/org/json/JSONException.class b/lib/json-20180813/org/json/JSONException.class
new file mode 100644
index 0000000..0646b30
Binary files /dev/null and b/lib/json-20180813/org/json/JSONException.class differ
diff --git a/lib/json-20180813/org/json/JSONML.class b/lib/json-20180813/org/json/JSONML.class
new file mode 100644
index 0000000..2c7f02c
Binary files /dev/null and b/lib/json-20180813/org/json/JSONML.class differ
diff --git a/lib/json-20180813/org/json/JSONObject$1.class b/lib/json-20180813/org/json/JSONObject$1.class
new file mode 100644
index 0000000..2618e2c
Binary files /dev/null and b/lib/json-20180813/org/json/JSONObject$1.class differ
diff --git a/lib/json-20180813/org/json/JSONObject$Null.class b/lib/json-20180813/org/json/JSONObject$Null.class
new file mode 100644
index 0000000..eb4a0e2
Binary files /dev/null and b/lib/json-20180813/org/json/JSONObject$Null.class differ
diff --git a/lib/json-20180813/org/json/JSONObject.class b/lib/json-20180813/org/json/JSONObject.class
new file mode 100644
index 0000000..de059d6
Binary files /dev/null and b/lib/json-20180813/org/json/JSONObject.class differ
diff --git a/lib/json-20180813/org/json/JSONPointer$Builder.class b/lib/json-20180813/org/json/JSONPointer$Builder.class
new file mode 100644
index 0000000..bfa1036
Binary files /dev/null and b/lib/json-20180813/org/json/JSONPointer$Builder.class differ
diff --git a/lib/json-20180813/org/json/JSONPointer.class b/lib/json-20180813/org/json/JSONPointer.class
new file mode 100644
index 0000000..eb95f66
Binary files /dev/null and b/lib/json-20180813/org/json/JSONPointer.class differ
diff --git a/lib/json-20180813/org/json/JSONPointerException.class b/lib/json-20180813/org/json/JSONPointerException.class
new file mode 100644
index 0000000..60a7a6c
Binary files /dev/null and b/lib/json-20180813/org/json/JSONPointerException.class differ
diff --git a/lib/json-20180813/org/json/JSONPropertyIgnore.class b/lib/json-20180813/org/json/JSONPropertyIgnore.class
new file mode 100644
index 0000000..3df0f61
Binary files /dev/null and b/lib/json-20180813/org/json/JSONPropertyIgnore.class differ
diff --git a/lib/json-20180813/org/json/JSONPropertyName.class b/lib/json-20180813/org/json/JSONPropertyName.class
new file mode 100644
index 0000000..c993e2c
Binary files /dev/null and b/lib/json-20180813/org/json/JSONPropertyName.class differ
diff --git a/lib/json-20180813/org/json/JSONString.class b/lib/json-20180813/org/json/JSONString.class
new file mode 100644
index 0000000..329f686
Binary files /dev/null and b/lib/json-20180813/org/json/JSONString.class differ
diff --git a/lib/json-20180813/org/json/JSONStringer.class b/lib/json-20180813/org/json/JSONStringer.class
new file mode 100644
index 0000000..0280a1c
Binary files /dev/null and b/lib/json-20180813/org/json/JSONStringer.class differ
diff --git a/lib/json-20180813/org/json/JSONTokener.class b/lib/json-20180813/org/json/JSONTokener.class
new file mode 100644
index 0000000..f18dd05
Binary files /dev/null and b/lib/json-20180813/org/json/JSONTokener.class differ
diff --git a/lib/json-20180813/org/json/JSONWriter.class b/lib/json-20180813/org/json/JSONWriter.class
new file mode 100644
index 0000000..9419f4b
Binary files /dev/null and b/lib/json-20180813/org/json/JSONWriter.class differ
diff --git a/lib/json-20180813/org/json/Property.class b/lib/json-20180813/org/json/Property.class
new file mode 100644
index 0000000..a655432
Binary files /dev/null and b/lib/json-20180813/org/json/Property.class differ
diff --git a/lib/json-20180813/org/json/XML$1$1.class b/lib/json-20180813/org/json/XML$1$1.class
new file mode 100644
index 0000000..ab40989
Binary files /dev/null and b/lib/json-20180813/org/json/XML$1$1.class differ
diff --git a/lib/json-20180813/org/json/XML$1.class b/lib/json-20180813/org/json/XML$1.class
new file mode 100644
index 0000000..7d22cc4
Binary files /dev/null and b/lib/json-20180813/org/json/XML$1.class differ
diff --git a/lib/json-20180813/org/json/XML.class b/lib/json-20180813/org/json/XML.class
new file mode 100644
index 0000000..1ce5cf9
Binary files /dev/null and b/lib/json-20180813/org/json/XML.class differ
diff --git a/lib/json-20180813/org/json/XMLParserConfiguration.class b/lib/json-20180813/org/json/XMLParserConfiguration.class
new file mode 100644
index 0000000..5fc3c8f
Binary files /dev/null and b/lib/json-20180813/org/json/XMLParserConfiguration.class differ
diff --git a/lib/json-20180813/org/json/XMLTokener.class b/lib/json-20180813/org/json/XMLTokener.class
new file mode 100644
index 0000000..84d9416
Binary files /dev/null and b/lib/json-20180813/org/json/XMLTokener.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/AngelCodeFont$1.class b/lib/json-20180813/org/newdawn/slick/AngelCodeFont$1.class
new file mode 100644
index 0000000..33a197f
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/AngelCodeFont$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/AngelCodeFont$CharDef.class b/lib/json-20180813/org/newdawn/slick/AngelCodeFont$CharDef.class
new file mode 100644
index 0000000..ea711f7
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/AngelCodeFont$CharDef.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/AngelCodeFont$DisplayList.class b/lib/json-20180813/org/newdawn/slick/AngelCodeFont$DisplayList.class
new file mode 100644
index 0000000..0d38a17
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/AngelCodeFont$DisplayList.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/AngelCodeFont.class b/lib/json-20180813/org/newdawn/slick/AngelCodeFont.class
new file mode 100644
index 0000000..49c6476
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/AngelCodeFont.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/Animation$Frame.class b/lib/json-20180813/org/newdawn/slick/Animation$Frame.class
new file mode 100644
index 0000000..87a7611
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/Animation$Frame.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/Animation.class b/lib/json-20180813/org/newdawn/slick/Animation.class
new file mode 100644
index 0000000..9d3fdaf
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/Animation.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/AppGameContainer$1.class b/lib/json-20180813/org/newdawn/slick/AppGameContainer$1.class
new file mode 100644
index 0000000..9203abf
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/AppGameContainer$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/AppGameContainer$2.class b/lib/json-20180813/org/newdawn/slick/AppGameContainer$2.class
new file mode 100644
index 0000000..e0a2db3
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/AppGameContainer$2.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/AppGameContainer$NullOutputStream.class b/lib/json-20180813/org/newdawn/slick/AppGameContainer$NullOutputStream.class
new file mode 100644
index 0000000..af6406b
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/AppGameContainer$NullOutputStream.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/AppGameContainer.class b/lib/json-20180813/org/newdawn/slick/AppGameContainer.class
new file mode 100644
index 0000000..17c5d52
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/AppGameContainer.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/AppletGameContainer$1.class b/lib/json-20180813/org/newdawn/slick/AppletGameContainer$1.class
new file mode 100644
index 0000000..82d932f
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/AppletGameContainer$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/AppletGameContainer$2.class b/lib/json-20180813/org/newdawn/slick/AppletGameContainer$2.class
new file mode 100644
index 0000000..cb56916
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/AppletGameContainer$2.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/AppletGameContainer$ConsolePanel.class b/lib/json-20180813/org/newdawn/slick/AppletGameContainer$ConsolePanel.class
new file mode 100644
index 0000000..2d03460
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/AppletGameContainer$ConsolePanel.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/AppletGameContainer$Container.class b/lib/json-20180813/org/newdawn/slick/AppletGameContainer$Container.class
new file mode 100644
index 0000000..d05d029
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/AppletGameContainer$Container.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/AppletGameContainer$ContainerPanel.class b/lib/json-20180813/org/newdawn/slick/AppletGameContainer$ContainerPanel.class
new file mode 100644
index 0000000..4a8acf5
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/AppletGameContainer$ContainerPanel.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/AppletGameContainer.class b/lib/json-20180813/org/newdawn/slick/AppletGameContainer.class
new file mode 100644
index 0000000..c31f507
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/AppletGameContainer.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/BasicGame.class b/lib/json-20180813/org/newdawn/slick/BasicGame.class
new file mode 100644
index 0000000..06d3503
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/BasicGame.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/BigImage$1.class b/lib/json-20180813/org/newdawn/slick/BigImage$1.class
new file mode 100644
index 0000000..6209029
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/BigImage$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/BigImage$2.class b/lib/json-20180813/org/newdawn/slick/BigImage$2.class
new file mode 100644
index 0000000..9dd4032
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/BigImage$2.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/BigImage.class b/lib/json-20180813/org/newdawn/slick/BigImage.class
new file mode 100644
index 0000000..1d7bb4c
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/BigImage.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/CachedRender.class b/lib/json-20180813/org/newdawn/slick/CachedRender.class
new file mode 100644
index 0000000..404abcd
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/CachedRender.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/CanvasGameContainer$1.class b/lib/json-20180813/org/newdawn/slick/CanvasGameContainer$1.class
new file mode 100644
index 0000000..7c04da7
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/CanvasGameContainer$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/CanvasGameContainer$2.class b/lib/json-20180813/org/newdawn/slick/CanvasGameContainer$2.class
new file mode 100644
index 0000000..7b4dc42
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/CanvasGameContainer$2.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/CanvasGameContainer$Container.class b/lib/json-20180813/org/newdawn/slick/CanvasGameContainer$Container.class
new file mode 100644
index 0000000..97a79d9
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/CanvasGameContainer$Container.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/CanvasGameContainer.class b/lib/json-20180813/org/newdawn/slick/CanvasGameContainer.class
new file mode 100644
index 0000000..baf2f2e
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/CanvasGameContainer.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/Color.class b/lib/json-20180813/org/newdawn/slick/Color.class
new file mode 100644
index 0000000..69ace62
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/Color.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/ControlledInputReciever.class b/lib/json-20180813/org/newdawn/slick/ControlledInputReciever.class
new file mode 100644
index 0000000..e96a090
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/ControlledInputReciever.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/ControllerListener.class b/lib/json-20180813/org/newdawn/slick/ControllerListener.class
new file mode 100644
index 0000000..c019a0c
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/ControllerListener.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/Font.class b/lib/json-20180813/org/newdawn/slick/Font.class
new file mode 100644
index 0000000..1cbe51b
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/Font.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/Game.class b/lib/json-20180813/org/newdawn/slick/Game.class
new file mode 100644
index 0000000..694c135
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/Game.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/GameContainer.class b/lib/json-20180813/org/newdawn/slick/GameContainer.class
new file mode 100644
index 0000000..19c0780
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/GameContainer.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/Graphics$1.class b/lib/json-20180813/org/newdawn/slick/Graphics$1.class
new file mode 100644
index 0000000..18b3f1f
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/Graphics$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/Graphics.class b/lib/json-20180813/org/newdawn/slick/Graphics.class
new file mode 100644
index 0000000..a556441
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/Graphics.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/Image.class b/lib/json-20180813/org/newdawn/slick/Image.class
new file mode 100644
index 0000000..4406ee1
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/Image.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/ImageBuffer.class b/lib/json-20180813/org/newdawn/slick/ImageBuffer.class
new file mode 100644
index 0000000..c2a47ba
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/ImageBuffer.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/Input$NullOutputStream.class b/lib/json-20180813/org/newdawn/slick/Input$NullOutputStream.class
new file mode 100644
index 0000000..9493118
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/Input$NullOutputStream.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/Input.class b/lib/json-20180813/org/newdawn/slick/Input.class
new file mode 100644
index 0000000..de7049c
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/Input.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/InputListener.class b/lib/json-20180813/org/newdawn/slick/InputListener.class
new file mode 100644
index 0000000..51ff01a
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/InputListener.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/KeyListener.class b/lib/json-20180813/org/newdawn/slick/KeyListener.class
new file mode 100644
index 0000000..654c119
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/KeyListener.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/MouseListener.class b/lib/json-20180813/org/newdawn/slick/MouseListener.class
new file mode 100644
index 0000000..7ab5e5c
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/MouseListener.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/Music.class b/lib/json-20180813/org/newdawn/slick/Music.class
new file mode 100644
index 0000000..aa7de98
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/Music.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/MusicListener.class b/lib/json-20180813/org/newdawn/slick/MusicListener.class
new file mode 100644
index 0000000..db275b3
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/MusicListener.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/PackedSpriteSheet$Section.class b/lib/json-20180813/org/newdawn/slick/PackedSpriteSheet$Section.class
new file mode 100644
index 0000000..84557b6
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/PackedSpriteSheet$Section.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/PackedSpriteSheet.class b/lib/json-20180813/org/newdawn/slick/PackedSpriteSheet.class
new file mode 100644
index 0000000..f464713
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/PackedSpriteSheet.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/Renderable.class b/lib/json-20180813/org/newdawn/slick/Renderable.class
new file mode 100644
index 0000000..ec54de8
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/Renderable.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/SavedState.class b/lib/json-20180813/org/newdawn/slick/SavedState.class
new file mode 100644
index 0000000..fee20c0
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/SavedState.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/ScalableGame.class b/lib/json-20180813/org/newdawn/slick/ScalableGame.class
new file mode 100644
index 0000000..4e5a8ce
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/ScalableGame.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/ShapeFill.class b/lib/json-20180813/org/newdawn/slick/ShapeFill.class
new file mode 100644
index 0000000..f9a30de
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/ShapeFill.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/SlickException.class b/lib/json-20180813/org/newdawn/slick/SlickException.class
new file mode 100644
index 0000000..2ad0525
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/SlickException.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/Sound.class b/lib/json-20180813/org/newdawn/slick/Sound.class
new file mode 100644
index 0000000..9b41f19
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/Sound.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/SpriteSheet.class b/lib/json-20180813/org/newdawn/slick/SpriteSheet.class
new file mode 100644
index 0000000..9bc12bc
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/SpriteSheet.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/SpriteSheetFont.class b/lib/json-20180813/org/newdawn/slick/SpriteSheetFont.class
new file mode 100644
index 0000000..0d72870
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/SpriteSheetFont.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/TrueTypeFont$1.class b/lib/json-20180813/org/newdawn/slick/TrueTypeFont$1.class
new file mode 100644
index 0000000..1d7abcc
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/TrueTypeFont$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/TrueTypeFont$IntObject.class b/lib/json-20180813/org/newdawn/slick/TrueTypeFont$IntObject.class
new file mode 100644
index 0000000..afe2da8
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/TrueTypeFont$IntObject.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/TrueTypeFont.class b/lib/json-20180813/org/newdawn/slick/TrueTypeFont.class
new file mode 100644
index 0000000..2e33601
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/TrueTypeFont.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/UnicodeFont$1.class b/lib/json-20180813/org/newdawn/slick/UnicodeFont$1.class
new file mode 100644
index 0000000..5132fab
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/UnicodeFont$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/UnicodeFont$2.class b/lib/json-20180813/org/newdawn/slick/UnicodeFont$2.class
new file mode 100644
index 0000000..189ae7c
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/UnicodeFont$2.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/UnicodeFont$3.class b/lib/json-20180813/org/newdawn/slick/UnicodeFont$3.class
new file mode 100644
index 0000000..5a8dd74
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/UnicodeFont$3.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/UnicodeFont$DisplayList.class b/lib/json-20180813/org/newdawn/slick/UnicodeFont$DisplayList.class
new file mode 100644
index 0000000..61f0f35
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/UnicodeFont$DisplayList.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/UnicodeFont.class b/lib/json-20180813/org/newdawn/slick/UnicodeFont.class
new file mode 100644
index 0000000..9478cba
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/UnicodeFont.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/XMLPackedSheet.class b/lib/json-20180813/org/newdawn/slick/XMLPackedSheet.class
new file mode 100644
index 0000000..a05842e
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/XMLPackedSheet.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/command/BasicCommand.class b/lib/json-20180813/org/newdawn/slick/command/BasicCommand.class
new file mode 100644
index 0000000..7715002
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/command/BasicCommand.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/command/Command.class b/lib/json-20180813/org/newdawn/slick/command/Command.class
new file mode 100644
index 0000000..ab12ff0
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/command/Command.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/command/Control.class b/lib/json-20180813/org/newdawn/slick/command/Control.class
new file mode 100644
index 0000000..f26af64
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/command/Control.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/command/ControllerButtonControl.class b/lib/json-20180813/org/newdawn/slick/command/ControllerButtonControl.class
new file mode 100644
index 0000000..8cea1b5
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/command/ControllerButtonControl.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/command/ControllerControl.class b/lib/json-20180813/org/newdawn/slick/command/ControllerControl.class
new file mode 100644
index 0000000..d1bb74d
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/command/ControllerControl.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/command/ControllerDirectionControl$Direction.class b/lib/json-20180813/org/newdawn/slick/command/ControllerDirectionControl$Direction.class
new file mode 100644
index 0000000..711365b
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/command/ControllerDirectionControl$Direction.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/command/ControllerDirectionControl.class b/lib/json-20180813/org/newdawn/slick/command/ControllerDirectionControl.class
new file mode 100644
index 0000000..fe86611
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/command/ControllerDirectionControl.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/command/InputProvider$1.class b/lib/json-20180813/org/newdawn/slick/command/InputProvider$1.class
new file mode 100644
index 0000000..07f765f
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/command/InputProvider$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/command/InputProvider$CommandState.class b/lib/json-20180813/org/newdawn/slick/command/InputProvider$CommandState.class
new file mode 100644
index 0000000..d21f626
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/command/InputProvider$CommandState.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/command/InputProvider$InputListenerImpl.class b/lib/json-20180813/org/newdawn/slick/command/InputProvider$InputListenerImpl.class
new file mode 100644
index 0000000..052e9e4
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/command/InputProvider$InputListenerImpl.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/command/InputProvider.class b/lib/json-20180813/org/newdawn/slick/command/InputProvider.class
new file mode 100644
index 0000000..ffeba2a
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/command/InputProvider.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/command/InputProviderListener.class b/lib/json-20180813/org/newdawn/slick/command/InputProviderListener.class
new file mode 100644
index 0000000..b8f0597
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/command/InputProviderListener.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/command/KeyControl.class b/lib/json-20180813/org/newdawn/slick/command/KeyControl.class
new file mode 100644
index 0000000..9a9ff12
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/command/KeyControl.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/command/MouseButtonControl.class b/lib/json-20180813/org/newdawn/slick/command/MouseButtonControl.class
new file mode 100644
index 0000000..6514a26
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/command/MouseButtonControl.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/data/defaultfont.fnt b/lib/json-20180813/org/newdawn/slick/data/defaultfont.fnt
new file mode 100644
index 0000000..af16759
--- /dev/null
+++ b/lib/json-20180813/org/newdawn/slick/data/defaultfont.fnt
@@ -0,0 +1,195 @@
+info face="Courier New Bold" size=16 bold=1 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1
+common lineHeight=19 base=26 scaleW=256 scaleH=256 pages=1 packed=0
+page id=0 file="defaultfont.png"
+chars count=189
+char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=14 xadvance=9 page=0 chnl=0
+char id=253 x=0 y=0 width=12 height=16 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=0
+char id=254 x=12 y=0 width=11 height=15 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
+char id=221 x=23 y=0 width=12 height=15 xoffset=0 yoffset=0 xadvance=9 page=0 chnl=0
+char id=218 x=35 y=0 width=11 height=15 xoffset=0 yoffset=0 xadvance=9 page=0 chnl=0
+char id=217 x=46 y=0 width=11 height=15 xoffset=0 yoffset=0 xadvance=9 page=0 chnl=0
+char id=211 x=57 y=0 width=11 height=15 xoffset=0 yoffset=0 xadvance=9 page=0 chnl=0
+char id=210 x=68 y=0 width=11 height=15 xoffset=0 yoffset=0 xadvance=9 page=0 chnl=0
+char id=205 x=79 y=0 width=10 height=15 xoffset=1 yoffset=0 xadvance=9 page=0 chnl=0
+char id=204 x=89 y=0 width=10 height=15 xoffset=1 yoffset=0 xadvance=9 page=0 chnl=0
+char id=201 x=99 y=0 width=10 height=15 xoffset=0 yoffset=0 xadvance=9 page=0 chnl=0
+char id=200 x=109 y=0 width=10 height=15 xoffset=0 yoffset=0 xadvance=9 page=0 chnl=0
+char id=199 x=119 y=0 width=11 height=15 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=197 x=130 y=0 width=12 height=15 xoffset=0 yoffset=0 xadvance=9 page=0 chnl=0
+char id=193 x=142 y=0 width=12 height=15 xoffset=0 yoffset=0 xadvance=9 page=0 chnl=0
+char id=192 x=154 y=0 width=12 height=15 xoffset=0 yoffset=0 xadvance=9 page=0 chnl=0
+char id=36 x=166 y=0 width=9 height=15 xoffset=1 yoffset=2 xadvance=9 page=0 chnl=0
+char id=106 x=175 y=0 width=8 height=15 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
+char id=255 x=183 y=0 width=12 height=14 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=219 x=195 y=0 width=11 height=14 xoffset=0 yoffset=1 xadvance=9 page=0 chnl=0
+char id=213 x=206 y=0 width=11 height=14 xoffset=0 yoffset=1 xadvance=9 page=0 chnl=0
+char id=212 x=217 y=0 width=11 height=14 xoffset=0 yoffset=1 xadvance=9 page=0 chnl=0
+char id=209 x=228 y=0 width=11 height=14 xoffset=0 yoffset=1 xadvance=9 page=0 chnl=0
+char id=206 x=239 y=0 width=10 height=14 xoffset=1 yoffset=1 xadvance=9 page=0 chnl=0
+char id=202 x=0 y=16 width=10 height=14 xoffset=0 yoffset=1 xadvance=9 page=0 chnl=0
+char id=195 x=10 y=16 width=12 height=14 xoffset=0 yoffset=1 xadvance=9 page=0 chnl=0
+char id=194 x=22 y=16 width=12 height=14 xoffset=0 yoffset=1 xadvance=9 page=0 chnl=0
+char id=162 x=34 y=16 width=10 height=14 xoffset=1 yoffset=2 xadvance=9 page=0 chnl=0
+char id=92 x=44 y=16 width=9 height=14 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
+char id=47 x=53 y=16 width=9 height=14 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
+char id=93 x=62 y=16 width=6 height=14 xoffset=2 yoffset=3 xadvance=9 page=0 chnl=0
+char id=91 x=68 y=16 width=6 height=14 xoffset=4 yoffset=3 xadvance=9 page=0 chnl=0
+char id=41 x=74 y=16 width=5 height=14 xoffset=2 yoffset=3 xadvance=9 page=0 chnl=0
+char id=40 x=79 y=16 width=5 height=14 xoffset=3 yoffset=3 xadvance=9 page=0 chnl=0
+char id=250 x=84 y=16 width=11 height=13 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=0
+char id=249 x=95 y=16 width=11 height=13 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=0
+char id=243 x=106 y=16 width=10 height=13 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=0
+char id=242 x=116 y=16 width=10 height=13 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=0
+char id=237 x=126 y=16 width=10 height=13 xoffset=1 yoffset=2 xadvance=9 page=0 chnl=0
+char id=236 x=136 y=16 width=10 height=13 xoffset=1 yoffset=2 xadvance=9 page=0 chnl=0
+char id=233 x=146 y=16 width=11 height=13 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=0
+char id=232 x=157 y=16 width=11 height=13 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=0
+char id=229 x=168 y=16 width=10 height=13 xoffset=1 yoffset=2 xadvance=9 page=0 chnl=0
+char id=225 x=178 y=16 width=10 height=13 xoffset=1 yoffset=2 xadvance=9 page=0 chnl=0
+char id=224 x=188 y=16 width=10 height=13 xoffset=1 yoffset=2 xadvance=9 page=0 chnl=0
+char id=220 x=198 y=16 width=11 height=13 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=0
+char id=216 x=209 y=16 width=11 height=13 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
+char id=214 x=220 y=16 width=11 height=13 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=0
+char id=207 x=231 y=16 width=10 height=13 xoffset=1 yoffset=2 xadvance=9 page=0 chnl=0
+char id=203 x=241 y=16 width=10 height=13 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=0
+char id=196 x=0 y=30 width=12 height=13 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=0
+char id=182 x=12 y=30 width=10 height=13 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
+char id=167 x=22 y=30 width=10 height=13 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
+char id=166 x=32 y=30 width=4 height=13 xoffset=4 yoffset=4 xadvance=9 page=0 chnl=0
+char id=124 x=36 y=30 width=4 height=13 xoffset=4 yoffset=4 xadvance=9 page=0 chnl=0
+char id=125 x=40 y=30 width=6 height=13 xoffset=3 yoffset=4 xadvance=9 page=0 chnl=0
+char id=123 x=46 y=30 width=6 height=13 xoffset=2 yoffset=4 xadvance=9 page=0 chnl=0
+char id=81 x=52 y=30 width=11 height=13 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=251 x=63 y=30 width=11 height=12 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
+char id=245 x=74 y=30 width=10 height=12 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
+char id=244 x=84 y=30 width=10 height=12 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
+char id=241 x=94 y=30 width=11 height=12 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
+char id=240 x=105 y=30 width=10 height=12 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
+char id=238 x=115 y=30 width=10 height=12 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
+char id=234 x=125 y=30 width=11 height=12 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
+char id=231 x=136 y=30 width=10 height=12 xoffset=0 yoffset=7 xadvance=9 page=0 chnl=0
+char id=227 x=146 y=30 width=10 height=12 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
+char id=226 x=156 y=30 width=10 height=12 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
+char id=223 x=166 y=30 width=9 height=12 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
+char id=181 x=175 y=30 width=11 height=12 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0
+char id=127 x=186 y=30 width=11 height=12 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
+char id=35 x=197 y=30 width=10 height=12 xoffset=1 yoffset=4 xadvance=9 page=0 chnl=0
+char id=64 x=207 y=30 width=8 height=12 xoffset=1 yoffset=4 xadvance=9 page=0 chnl=0
+char id=48 x=215 y=30 width=9 height=12 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
+char id=57 x=224 y=30 width=9 height=12 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
+char id=56 x=233 y=30 width=9 height=12 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
+char id=55 x=242 y=30 width=9 height=12 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
+char id=54 x=0 y=43 width=9 height=12 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
+char id=53 x=9 y=43 width=9 height=12 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
+char id=52 x=18 y=43 width=9 height=12 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
+char id=51 x=27 y=43 width=9 height=12 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
+char id=50 x=36 y=43 width=8 height=12 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
+char id=121 x=44 y=43 width=12 height=12 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0
+char id=113 x=56 y=43 width=11 height=12 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0
+char id=112 x=67 y=43 width=11 height=12 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0
+char id=108 x=78 y=43 width=10 height=12 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
+char id=107 x=88 y=43 width=11 height=12 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
+char id=105 x=99 y=43 width=10 height=12 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
+char id=104 x=109 y=43 width=11 height=12 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
+char id=103 x=120 y=43 width=11 height=12 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0
+char id=102 x=131 y=43 width=10 height=12 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
+char id=100 x=141 y=43 width=11 height=12 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
+char id=98 x=152 y=43 width=11 height=12 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0
+char id=252 x=163 y=43 width=11 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=248 x=174 y=43 width=10 height=11 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0
+char id=246 x=184 y=43 width=10 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=239 x=194 y=43 width=10 height=11 xoffset=1 yoffset=4 xadvance=9 page=0 chnl=0
+char id=235 x=204 y=43 width=11 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=228 x=215 y=43 width=10 height=11 xoffset=1 yoffset=4 xadvance=9 page=0 chnl=0
+char id=222 x=225 y=43 width=10 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=208 x=235 y=43 width=11 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=198 x=0 y=55 width=12 height=11 xoffset=-1 yoffset=4 xadvance=9 page=0 chnl=0
+char id=191 x=12 y=55 width=9 height=11 xoffset=1 yoffset=7 xadvance=9 page=0 chnl=0
+char id=190 x=21 y=55 width=12 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=189 x=33 y=55 width=12 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=188 x=45 y=55 width=12 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=177 x=57 y=55 width=9 height=11 xoffset=1 yoffset=4 xadvance=9 page=0 chnl=0
+char id=174 x=66 y=55 width=11 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=169 x=77 y=55 width=11 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=165 x=88 y=55 width=12 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=163 x=100 y=55 width=10 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=161 x=110 y=55 width=4 height=11 xoffset=3 yoffset=7 xadvance=9 page=0 chnl=0
+char id=38 x=114 y=55 width=9 height=11 xoffset=1 yoffset=4 xadvance=9 page=0 chnl=0
+char id=37 x=123 y=55 width=9 height=11 xoffset=1 yoffset=4 xadvance=9 page=0 chnl=0
+char id=63 x=132 y=55 width=8 height=11 xoffset=1 yoffset=4 xadvance=9 page=0 chnl=0
+char id=33 x=140 y=55 width=4 height=11 xoffset=3 yoffset=4 xadvance=9 page=0 chnl=0
+char id=49 x=144 y=55 width=10 height=11 xoffset=1 yoffset=4 xadvance=9 page=0 chnl=0
+char id=116 x=154 y=55 width=9 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=90 x=163 y=55 width=9 height=11 xoffset=1 yoffset=4 xadvance=9 page=0 chnl=0
+char id=89 x=172 y=55 width=12 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=88 x=184 y=55 width=11 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=87 x=195 y=55 width=13 height=11 xoffset=-1 yoffset=4 xadvance=9 page=0 chnl=0
+char id=86 x=208 y=55 width=11 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=85 x=219 y=55 width=11 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=84 x=230 y=55 width=10 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=83 x=240 y=55 width=9 height=11 xoffset=1 yoffset=4 xadvance=9 page=0 chnl=0
+char id=82 x=0 y=66 width=12 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=80 x=12 y=66 width=10 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=79 x=22 y=66 width=11 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=78 x=33 y=66 width=11 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=77 x=44 y=66 width=13 height=11 xoffset=-1 yoffset=4 xadvance=9 page=0 chnl=0
+char id=76 x=57 y=66 width=11 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=75 x=68 y=66 width=11 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=74 x=79 y=66 width=11 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=73 x=90 y=66 width=10 height=11 xoffset=1 yoffset=4 xadvance=9 page=0 chnl=0
+char id=72 x=100 y=66 width=11 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=71 x=111 y=66 width=11 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=70 x=122 y=66 width=11 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=69 x=133 y=66 width=10 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=68 x=143 y=66 width=11 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=67 x=154 y=66 width=11 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=66 x=165 y=66 width=10 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=65 x=175 y=66 width=12 height=11 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=247 x=187 y=66 width=10 height=10 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0
+char id=62 x=197 y=66 width=10 height=10 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0
+char id=60 x=207 y=66 width=11 height=10 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=0
+char id=59 x=218 y=66 width=6 height=10 xoffset=2 yoffset=7 xadvance=9 page=0 chnl=0
+char id=230 x=224 y=66 width=12 height=9 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0
+char id=164 x=236 y=66 width=11 height=9 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=0
+char id=43 x=0 y=77 width=9 height=9 xoffset=1 yoffset=5 xadvance=9 page=0 chnl=0
+char id=122 x=9 y=77 width=9 height=9 xoffset=1 yoffset=6 xadvance=9 page=0 chnl=0
+char id=120 x=18 y=77 width=11 height=9 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0
+char id=119 x=29 y=77 width=13 height=9 xoffset=-1 yoffset=6 xadvance=9 page=0 chnl=0
+char id=118 x=42 y=77 width=11 height=9 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0
+char id=117 x=53 y=77 width=11 height=9 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0
+char id=115 x=64 y=77 width=9 height=9 xoffset=1 yoffset=6 xadvance=9 page=0 chnl=0
+char id=114 x=73 y=77 width=10 height=9 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0
+char id=111 x=83 y=77 width=10 height=9 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0
+char id=110 x=93 y=77 width=11 height=9 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0
+char id=109 x=104 y=77 width=12 height=9 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0
+char id=101 x=116 y=77 width=11 height=9 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=0
+char id=97 x=127 y=77 width=10 height=9 xoffset=1 yoffset=6 xadvance=9 page=0 chnl=0
+char id=42 x=137 y=77 width=10 height=8 xoffset=1 yoffset=4 xadvance=9 page=0 chnl=0
+char id=58 x=147 y=77 width=3 height=8 xoffset=3 yoffset=7 xadvance=9 page=0 chnl=0
+char id=99 x=150 y=77 width=10 height=8 xoffset=0 yoffset=7 xadvance=9 page=0 chnl=0
+char id=215 x=160 y=77 width=7 height=7 xoffset=1 yoffset=7 xadvance=9 page=0 chnl=0
+char id=187 x=167 y=77 width=10 height=7 xoffset=0 yoffset=8 xadvance=9 page=0 chnl=0
+char id=186 x=177 y=77 width=8 height=7 xoffset=2 yoffset=3 xadvance=9 page=0 chnl=0
+char id=184 x=185 y=77 width=5 height=7 xoffset=3 yoffset=12 xadvance=9 page=0 chnl=0
+char id=178 x=190 y=77 width=7 height=7 xoffset=2 yoffset=3 xadvance=9 page=0 chnl=0
+char id=172 x=197 y=77 width=11 height=7 xoffset=0 yoffset=8 xadvance=9 page=0 chnl=0
+char id=171 x=208 y=77 width=11 height=7 xoffset=0 yoffset=8 xadvance=9 page=0 chnl=0
+char id=94 x=219 y=77 width=8 height=7 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
+char id=44 x=227 y=77 width=4 height=7 xoffset=3 yoffset=11 xadvance=9 page=0 chnl=0
+char id=39 x=231 y=77 width=4 height=7 xoffset=4 yoffset=4 xadvance=9 page=0 chnl=0
+char id=34 x=235 y=77 width=8 height=7 xoffset=2 yoffset=4 xadvance=9 page=0 chnl=0
+char id=185 x=243 y=77 width=5 height=6 xoffset=3 yoffset=4 xadvance=9 page=0 chnl=0
+char id=179 x=248 y=77 width=7 height=6 xoffset=3 yoffset=4 xadvance=9 page=0 chnl=0
+char id=170 x=0 y=86 width=7 height=6 xoffset=2 yoffset=4 xadvance=9 page=0 chnl=0
+char id=180 x=7 y=86 width=4 height=5 xoffset=3 yoffset=2 xadvance=9 page=0 chnl=0
+char id=176 x=11 y=86 width=5 height=5 xoffset=2 yoffset=4 xadvance=9 page=0 chnl=0
+char id=126 x=16 y=86 width=9 height=5 xoffset=1 yoffset=7 xadvance=9 page=0 chnl=0
+char id=61 x=25 y=86 width=11 height=5 xoffset=0 yoffset=7 xadvance=9 page=0 chnl=0
+char id=96 x=36 y=86 width=4 height=5 xoffset=3 yoffset=2 xadvance=9 page=0 chnl=0
+char id=183 x=40 y=86 width=3 height=3 xoffset=3 yoffset=8 xadvance=9 page=0 chnl=0
+char id=175 x=43 y=86 width=13 height=3 xoffset=-1 yoffset=1 xadvance=9 page=0 chnl=0
+char id=168 x=56 y=86 width=6 height=3 xoffset=2 yoffset=4 xadvance=9 page=0 chnl=0
+char id=95 x=62 y=86 width=13 height=3 xoffset=-1 yoffset=17 xadvance=9 page=0 chnl=0
+char id=45 x=75 y=86 width=9 height=3 xoffset=1 yoffset=8 xadvance=9 page=0 chnl=0
+char id=46 x=84 y=86 width=3 height=3 xoffset=3 yoffset=12 xadvance=9 page=0 chnl=0
+kernings count=-1
diff --git a/lib/json-20180813/org/newdawn/slick/data/defaultfont.png b/lib/json-20180813/org/newdawn/slick/data/defaultfont.png
new file mode 100644
index 0000000..0e56abd
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/data/defaultfont.png differ
diff --git a/lib/json-20180813/org/newdawn/slick/data/helvetica_svg b/lib/json-20180813/org/newdawn/slick/data/helvetica_svg
new file mode 100644
index 0000000..59e7ade
--- /dev/null
+++ b/lib/json-20180813/org/newdawn/slick/data/helvetica_svg
@@ -0,0 +1,131 @@
+
+
+
diff --git a/lib/json-20180813/org/newdawn/slick/data/package.html b/lib/json-20180813/org/newdawn/slick/data/package.html
new file mode 100644
index 0000000..fd7ed79
--- /dev/null
+++ b/lib/json-20180813/org/newdawn/slick/data/package.html
@@ -0,0 +1,4 @@
+
+This package contains the default data required for the basic functions of YASL. Currently this includes a default
+font to ensure text can always be displayed.
+
\ No newline at end of file
diff --git a/lib/json-20180813/org/newdawn/slick/data/particle.tga b/lib/json-20180813/org/newdawn/slick/data/particle.tga
new file mode 100644
index 0000000..7d8ee51
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/data/particle.tga differ
diff --git a/lib/json-20180813/org/newdawn/slick/fills/GradientFill.class b/lib/json-20180813/org/newdawn/slick/fills/GradientFill.class
new file mode 100644
index 0000000..a0feeb0
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/fills/GradientFill.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/Glyph.class b/lib/json-20180813/org/newdawn/slick/font/Glyph.class
new file mode 100644
index 0000000..95073af
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/Glyph.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/GlyphPage$1.class b/lib/json-20180813/org/newdawn/slick/font/GlyphPage$1.class
new file mode 100644
index 0000000..56e3018
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/GlyphPage$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/GlyphPage.class b/lib/json-20180813/org/newdawn/slick/font/GlyphPage.class
new file mode 100644
index 0000000..a9dc005
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/GlyphPage.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/HieroSettings.class b/lib/json-20180813/org/newdawn/slick/font/HieroSettings.class
new file mode 100644
index 0000000..b653b9a
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/HieroSettings.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/ColorEffect.class b/lib/json-20180813/org/newdawn/slick/font/effects/ColorEffect.class
new file mode 100644
index 0000000..9684506
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/ColorEffect.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/ConfigurableEffect$Value.class b/lib/json-20180813/org/newdawn/slick/font/effects/ConfigurableEffect$Value.class
new file mode 100644
index 0000000..fd2d1bf
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/ConfigurableEffect$Value.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/ConfigurableEffect.class b/lib/json-20180813/org/newdawn/slick/font/effects/ConfigurableEffect.class
new file mode 100644
index 0000000..22f21c6
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/ConfigurableEffect.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/Effect.class b/lib/json-20180813/org/newdawn/slick/font/effects/Effect.class
new file mode 100644
index 0000000..5bf6e8f
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/Effect.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$1.class b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$1.class
new file mode 100644
index 0000000..5e3dd87
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$2.class b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$2.class
new file mode 100644
index 0000000..474b0b0
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$2.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$3.class b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$3.class
new file mode 100644
index 0000000..561bf42
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$3.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$4.class b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$4.class
new file mode 100644
index 0000000..094d6fa
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$4.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$5.class b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$5.class
new file mode 100644
index 0000000..412039c
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$5.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$DefaultValue$1.class b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$DefaultValue$1.class
new file mode 100644
index 0000000..45687e2
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$DefaultValue$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$DefaultValue.class b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$DefaultValue.class
new file mode 100644
index 0000000..fcf64b7
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$DefaultValue.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$ValueDialog$1.class b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$ValueDialog$1.class
new file mode 100644
index 0000000..2154b82
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$ValueDialog$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$ValueDialog$2.class b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$ValueDialog$2.class
new file mode 100644
index 0000000..57e6982
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$ValueDialog$2.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$ValueDialog.class b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$ValueDialog.class
new file mode 100644
index 0000000..3e3c452
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil$ValueDialog.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil.class b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil.class
new file mode 100644
index 0000000..3fd96bc
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/EffectUtil.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/FilterEffect.class b/lib/json-20180813/org/newdawn/slick/font/effects/FilterEffect.class
new file mode 100644
index 0000000..df59cd9
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/FilterEffect.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/GradientEffect.class b/lib/json-20180813/org/newdawn/slick/font/effects/GradientEffect.class
new file mode 100644
index 0000000..19dccde
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/GradientEffect.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/OutlineEffect.class b/lib/json-20180813/org/newdawn/slick/font/effects/OutlineEffect.class
new file mode 100644
index 0000000..5475d61
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/OutlineEffect.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/OutlineWobbleEffect$1.class b/lib/json-20180813/org/newdawn/slick/font/effects/OutlineWobbleEffect$1.class
new file mode 100644
index 0000000..cba6137
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/OutlineWobbleEffect$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/OutlineWobbleEffect$WobbleStroke.class b/lib/json-20180813/org/newdawn/slick/font/effects/OutlineWobbleEffect$WobbleStroke.class
new file mode 100644
index 0000000..52d049c
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/OutlineWobbleEffect$WobbleStroke.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/OutlineWobbleEffect.class b/lib/json-20180813/org/newdawn/slick/font/effects/OutlineWobbleEffect.class
new file mode 100644
index 0000000..5168b54
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/OutlineWobbleEffect.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/OutlineZigzagEffect$1.class b/lib/json-20180813/org/newdawn/slick/font/effects/OutlineZigzagEffect$1.class
new file mode 100644
index 0000000..9b23b58
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/OutlineZigzagEffect$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/OutlineZigzagEffect$ZigzagStroke.class b/lib/json-20180813/org/newdawn/slick/font/effects/OutlineZigzagEffect$ZigzagStroke.class
new file mode 100644
index 0000000..781b427
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/OutlineZigzagEffect$ZigzagStroke.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/OutlineZigzagEffect.class b/lib/json-20180813/org/newdawn/slick/font/effects/OutlineZigzagEffect.class
new file mode 100644
index 0000000..5f22368
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/OutlineZigzagEffect.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/font/effects/ShadowEffect.class b/lib/json-20180813/org/newdawn/slick/font/effects/ShadowEffect.class
new file mode 100644
index 0000000..7bb5bcb
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/font/effects/ShadowEffect.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/BasicTriangulator$Point.class b/lib/json-20180813/org/newdawn/slick/geom/BasicTriangulator$Point.class
new file mode 100644
index 0000000..38d6c52
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/BasicTriangulator$Point.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/BasicTriangulator$PointList.class b/lib/json-20180813/org/newdawn/slick/geom/BasicTriangulator$PointList.class
new file mode 100644
index 0000000..30bc527
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/BasicTriangulator$PointList.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/BasicTriangulator.class b/lib/json-20180813/org/newdawn/slick/geom/BasicTriangulator.class
new file mode 100644
index 0000000..858ff1b
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/BasicTriangulator.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/Circle.class b/lib/json-20180813/org/newdawn/slick/geom/Circle.class
new file mode 100644
index 0000000..9f05bf5
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/Circle.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/Curve.class b/lib/json-20180813/org/newdawn/slick/geom/Curve.class
new file mode 100644
index 0000000..ec224a4
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/Curve.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/Ellipse.class b/lib/json-20180813/org/newdawn/slick/geom/Ellipse.class
new file mode 100644
index 0000000..3656166
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/Ellipse.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/GeomUtil$HitResult.class b/lib/json-20180813/org/newdawn/slick/geom/GeomUtil$HitResult.class
new file mode 100644
index 0000000..7a3061f
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/GeomUtil$HitResult.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/GeomUtil.class b/lib/json-20180813/org/newdawn/slick/geom/GeomUtil.class
new file mode 100644
index 0000000..dadbc45
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/GeomUtil.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/GeomUtilListener.class b/lib/json-20180813/org/newdawn/slick/geom/GeomUtilListener.class
new file mode 100644
index 0000000..e4d10ff
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/GeomUtilListener.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/Line.class b/lib/json-20180813/org/newdawn/slick/geom/Line.class
new file mode 100644
index 0000000..0aba900
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/Line.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/MannTriangulator$Point.class b/lib/json-20180813/org/newdawn/slick/geom/MannTriangulator$Point.class
new file mode 100644
index 0000000..bef2888
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/MannTriangulator$Point.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/MannTriangulator$PointBag.class b/lib/json-20180813/org/newdawn/slick/geom/MannTriangulator$PointBag.class
new file mode 100644
index 0000000..905eb00
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/MannTriangulator$PointBag.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/MannTriangulator.class b/lib/json-20180813/org/newdawn/slick/geom/MannTriangulator.class
new file mode 100644
index 0000000..47a4f2f
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/MannTriangulator.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/MorphShape.class b/lib/json-20180813/org/newdawn/slick/geom/MorphShape.class
new file mode 100644
index 0000000..8231ad4
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/MorphShape.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/NeatTriangulator$Edge.class b/lib/json-20180813/org/newdawn/slick/geom/NeatTriangulator$Edge.class
new file mode 100644
index 0000000..5244698
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/NeatTriangulator$Edge.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/NeatTriangulator$InternalException.class b/lib/json-20180813/org/newdawn/slick/geom/NeatTriangulator$InternalException.class
new file mode 100644
index 0000000..c3b1740
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/NeatTriangulator$InternalException.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/NeatTriangulator$Triangle.class b/lib/json-20180813/org/newdawn/slick/geom/NeatTriangulator$Triangle.class
new file mode 100644
index 0000000..16b0bc4
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/NeatTriangulator$Triangle.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/NeatTriangulator.class b/lib/json-20180813/org/newdawn/slick/geom/NeatTriangulator.class
new file mode 100644
index 0000000..d3947c0
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/NeatTriangulator.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/OverTriangulator.class b/lib/json-20180813/org/newdawn/slick/geom/OverTriangulator.class
new file mode 100644
index 0000000..3d03e47
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/OverTriangulator.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/Path.class b/lib/json-20180813/org/newdawn/slick/geom/Path.class
new file mode 100644
index 0000000..649c685
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/Path.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/Point.class b/lib/json-20180813/org/newdawn/slick/geom/Point.class
new file mode 100644
index 0000000..68cc282
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/Point.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/Polygon.class b/lib/json-20180813/org/newdawn/slick/geom/Polygon.class
new file mode 100644
index 0000000..49a6bae
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/Polygon.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/Rectangle.class b/lib/json-20180813/org/newdawn/slick/geom/Rectangle.class
new file mode 100644
index 0000000..2fc07dc
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/Rectangle.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/RoundedRectangle.class b/lib/json-20180813/org/newdawn/slick/geom/RoundedRectangle.class
new file mode 100644
index 0000000..4250dfe
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/RoundedRectangle.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/Shape.class b/lib/json-20180813/org/newdawn/slick/geom/Shape.class
new file mode 100644
index 0000000..49d5e11
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/Shape.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$1.class b/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$1.class
new file mode 100644
index 0000000..f8c2d39
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$2.class b/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$2.class
new file mode 100644
index 0000000..2071095
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$2.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$3.class b/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$3.class
new file mode 100644
index 0000000..b3d447c
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$3.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$4.class b/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$4.class
new file mode 100644
index 0000000..0d56616
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$4.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$5.class b/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$5.class
new file mode 100644
index 0000000..d48822e
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$5.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$6.class b/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$6.class
new file mode 100644
index 0000000..7d1ea47
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$6.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$PointCallback.class b/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$PointCallback.class
new file mode 100644
index 0000000..8ec2336
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer$PointCallback.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer.class b/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer.class
new file mode 100644
index 0000000..e901f23
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/ShapeRenderer.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/TexCoordGenerator.class b/lib/json-20180813/org/newdawn/slick/geom/TexCoordGenerator.class
new file mode 100644
index 0000000..b4581cd
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/TexCoordGenerator.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/Transform.class b/lib/json-20180813/org/newdawn/slick/geom/Transform.class
new file mode 100644
index 0000000..891918f
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/Transform.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/Triangulator.class b/lib/json-20180813/org/newdawn/slick/geom/Triangulator.class
new file mode 100644
index 0000000..56bf586
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/Triangulator.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/geom/Vector2f.class b/lib/json-20180813/org/newdawn/slick/geom/Vector2f.class
new file mode 100644
index 0000000..9a16335
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/geom/Vector2f.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/gui/AbstractComponent.class b/lib/json-20180813/org/newdawn/slick/gui/AbstractComponent.class
new file mode 100644
index 0000000..f02f58e
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/gui/AbstractComponent.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/gui/BasicComponent.class b/lib/json-20180813/org/newdawn/slick/gui/BasicComponent.class
new file mode 100644
index 0000000..02ece31
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/gui/BasicComponent.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/gui/ComponentListener.class b/lib/json-20180813/org/newdawn/slick/gui/ComponentListener.class
new file mode 100644
index 0000000..8c79369
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/gui/ComponentListener.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/gui/GUIContext.class b/lib/json-20180813/org/newdawn/slick/gui/GUIContext.class
new file mode 100644
index 0000000..e8966bf
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/gui/GUIContext.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/gui/MouseOverArea.class b/lib/json-20180813/org/newdawn/slick/gui/MouseOverArea.class
new file mode 100644
index 0000000..2de9f28
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/gui/MouseOverArea.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/gui/TextField.class b/lib/json-20180813/org/newdawn/slick/gui/TextField.class
new file mode 100644
index 0000000..430156f
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/gui/TextField.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/imageout/ImageIOWriter.class b/lib/json-20180813/org/newdawn/slick/imageout/ImageIOWriter.class
new file mode 100644
index 0000000..399b429
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/imageout/ImageIOWriter.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/imageout/ImageOut.class b/lib/json-20180813/org/newdawn/slick/imageout/ImageOut.class
new file mode 100644
index 0000000..bde65ad
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/imageout/ImageOut.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/imageout/ImageWriter.class b/lib/json-20180813/org/newdawn/slick/imageout/ImageWriter.class
new file mode 100644
index 0000000..60f557a
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/imageout/ImageWriter.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/imageout/ImageWriterFactory.class b/lib/json-20180813/org/newdawn/slick/imageout/ImageWriterFactory.class
new file mode 100644
index 0000000..681e3b2
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/imageout/ImageWriterFactory.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/imageout/TGAWriter.class b/lib/json-20180813/org/newdawn/slick/imageout/TGAWriter.class
new file mode 100644
index 0000000..205ed18
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/imageout/TGAWriter.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/loading/DeferredResource.class b/lib/json-20180813/org/newdawn/slick/loading/DeferredResource.class
new file mode 100644
index 0000000..73f68d6
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/loading/DeferredResource.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/loading/LoadingList.class b/lib/json-20180813/org/newdawn/slick/loading/LoadingList.class
new file mode 100644
index 0000000..4a4f6f6
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/loading/LoadingList.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/muffin/FileMuffin.class b/lib/json-20180813/org/newdawn/slick/muffin/FileMuffin.class
new file mode 100644
index 0000000..abdf6eb
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/muffin/FileMuffin.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/muffin/Muffin.class b/lib/json-20180813/org/newdawn/slick/muffin/Muffin.class
new file mode 100644
index 0000000..ee01ade
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/muffin/Muffin.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/muffin/WebstartMuffin.class b/lib/json-20180813/org/newdawn/slick/muffin/WebstartMuffin.class
new file mode 100644
index 0000000..cd20a59
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/muffin/WebstartMuffin.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/openal/AiffData.class b/lib/json-20180813/org/newdawn/slick/openal/AiffData.class
new file mode 100644
index 0000000..2996f35
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/openal/AiffData.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/openal/Audio.class b/lib/json-20180813/org/newdawn/slick/openal/Audio.class
new file mode 100644
index 0000000..4c82091
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/openal/Audio.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/openal/AudioImpl.class b/lib/json-20180813/org/newdawn/slick/openal/AudioImpl.class
new file mode 100644
index 0000000..38b3f43
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/openal/AudioImpl.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/openal/AudioInputStream.class b/lib/json-20180813/org/newdawn/slick/openal/AudioInputStream.class
new file mode 100644
index 0000000..5338b1c
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/openal/AudioInputStream.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/openal/AudioLoader.class b/lib/json-20180813/org/newdawn/slick/openal/AudioLoader.class
new file mode 100644
index 0000000..9b54214
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/openal/AudioLoader.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/openal/DeferredSound.class b/lib/json-20180813/org/newdawn/slick/openal/DeferredSound.class
new file mode 100644
index 0000000..d9924bb
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/openal/DeferredSound.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/openal/MODSound.class b/lib/json-20180813/org/newdawn/slick/openal/MODSound.class
new file mode 100644
index 0000000..2a9116e
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/openal/MODSound.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/openal/NullAudio.class b/lib/json-20180813/org/newdawn/slick/openal/NullAudio.class
new file mode 100644
index 0000000..13142e8
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/openal/NullAudio.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/openal/OggData.class b/lib/json-20180813/org/newdawn/slick/openal/OggData.class
new file mode 100644
index 0000000..4076b7c
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/openal/OggData.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/openal/OggDecoder.class b/lib/json-20180813/org/newdawn/slick/openal/OggDecoder.class
new file mode 100644
index 0000000..e42f93e
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/openal/OggDecoder.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/openal/OggInputStream.class b/lib/json-20180813/org/newdawn/slick/openal/OggInputStream.class
new file mode 100644
index 0000000..db01e36
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/openal/OggInputStream.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/openal/OpenALStreamPlayer.class b/lib/json-20180813/org/newdawn/slick/openal/OpenALStreamPlayer.class
new file mode 100644
index 0000000..ebe3caf
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/openal/OpenALStreamPlayer.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/openal/SoundStore$1.class b/lib/json-20180813/org/newdawn/slick/openal/SoundStore$1.class
new file mode 100644
index 0000000..b007915
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/openal/SoundStore$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/openal/SoundStore.class b/lib/json-20180813/org/newdawn/slick/openal/SoundStore.class
new file mode 100644
index 0000000..235ae9a
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/openal/SoundStore.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/openal/StreamSound.class b/lib/json-20180813/org/newdawn/slick/openal/StreamSound.class
new file mode 100644
index 0000000..62bb3b9
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/openal/StreamSound.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/openal/WaveData.class b/lib/json-20180813/org/newdawn/slick/openal/WaveData.class
new file mode 100644
index 0000000..310e77b
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/openal/WaveData.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/CompositeIOException.class b/lib/json-20180813/org/newdawn/slick/opengl/CompositeIOException.class
new file mode 100644
index 0000000..755656d
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/CompositeIOException.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/CompositeImageData.class b/lib/json-20180813/org/newdawn/slick/opengl/CompositeImageData.class
new file mode 100644
index 0000000..da2a764
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/CompositeImageData.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/CursorLoader.class b/lib/json-20180813/org/newdawn/slick/opengl/CursorLoader.class
new file mode 100644
index 0000000..53cefc0
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/CursorLoader.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/DeferredTexture.class b/lib/json-20180813/org/newdawn/slick/opengl/DeferredTexture.class
new file mode 100644
index 0000000..f1fc143
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/DeferredTexture.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/EmptyImageData.class b/lib/json-20180813/org/newdawn/slick/opengl/EmptyImageData.class
new file mode 100644
index 0000000..d9e62a6
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/EmptyImageData.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/GLUtils.class b/lib/json-20180813/org/newdawn/slick/opengl/GLUtils.class
new file mode 100644
index 0000000..c3e4d15
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/GLUtils.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/ImageData.class b/lib/json-20180813/org/newdawn/slick/opengl/ImageData.class
new file mode 100644
index 0000000..2d5c53c
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/ImageData.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/ImageDataFactory$1.class b/lib/json-20180813/org/newdawn/slick/opengl/ImageDataFactory$1.class
new file mode 100644
index 0000000..c3a4d04
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/ImageDataFactory$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/ImageDataFactory.class b/lib/json-20180813/org/newdawn/slick/opengl/ImageDataFactory.class
new file mode 100644
index 0000000..2aecafb
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/ImageDataFactory.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/ImageIOImageData.class b/lib/json-20180813/org/newdawn/slick/opengl/ImageIOImageData.class
new file mode 100644
index 0000000..a8ee4b4
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/ImageIOImageData.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/InternalTextureLoader.class b/lib/json-20180813/org/newdawn/slick/opengl/InternalTextureLoader.class
new file mode 100644
index 0000000..3ff81f8
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/InternalTextureLoader.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/LoadableImageData.class b/lib/json-20180813/org/newdawn/slick/opengl/LoadableImageData.class
new file mode 100644
index 0000000..fd1d07a
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/LoadableImageData.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/PNGDecoder$1.class b/lib/json-20180813/org/newdawn/slick/opengl/PNGDecoder$1.class
new file mode 100644
index 0000000..014ec73
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/PNGDecoder$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/PNGDecoder$Format.class b/lib/json-20180813/org/newdawn/slick/opengl/PNGDecoder$Format.class
new file mode 100644
index 0000000..2f0accd
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/PNGDecoder$Format.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/PNGDecoder.class b/lib/json-20180813/org/newdawn/slick/opengl/PNGDecoder.class
new file mode 100644
index 0000000..5f757f1
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/PNGDecoder.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/PNGImageData.class b/lib/json-20180813/org/newdawn/slick/opengl/PNGImageData.class
new file mode 100644
index 0000000..0632e4a
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/PNGImageData.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/SlickCallable.class b/lib/json-20180813/org/newdawn/slick/opengl/SlickCallable.class
new file mode 100644
index 0000000..01f2662
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/SlickCallable.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/TGAImageData.class b/lib/json-20180813/org/newdawn/slick/opengl/TGAImageData.class
new file mode 100644
index 0000000..d930798
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/TGAImageData.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/Texture.class b/lib/json-20180813/org/newdawn/slick/opengl/Texture.class
new file mode 100644
index 0000000..67e6552
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/Texture.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/TextureImpl$1.class b/lib/json-20180813/org/newdawn/slick/opengl/TextureImpl$1.class
new file mode 100644
index 0000000..f748110
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/TextureImpl$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/TextureImpl$ReloadData.class b/lib/json-20180813/org/newdawn/slick/opengl/TextureImpl$ReloadData.class
new file mode 100644
index 0000000..86d76f7
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/TextureImpl$ReloadData.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/TextureImpl.class b/lib/json-20180813/org/newdawn/slick/opengl/TextureImpl.class
new file mode 100644
index 0000000..6b8e0db
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/TextureImpl.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/TextureLoader.class b/lib/json-20180813/org/newdawn/slick/opengl/TextureLoader.class
new file mode 100644
index 0000000..247f6cf
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/TextureLoader.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/pbuffer/FBOGraphics.class b/lib/json-20180813/org/newdawn/slick/opengl/pbuffer/FBOGraphics.class
new file mode 100644
index 0000000..831630d
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/pbuffer/FBOGraphics.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/pbuffer/GraphicsFactory.class b/lib/json-20180813/org/newdawn/slick/opengl/pbuffer/GraphicsFactory.class
new file mode 100644
index 0000000..a11e058
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/pbuffer/GraphicsFactory.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/pbuffer/PBufferGraphics.class b/lib/json-20180813/org/newdawn/slick/opengl/pbuffer/PBufferGraphics.class
new file mode 100644
index 0000000..fccd719
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/pbuffer/PBufferGraphics.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/pbuffer/PBufferUniqueGraphics.class b/lib/json-20180813/org/newdawn/slick/opengl/pbuffer/PBufferUniqueGraphics.class
new file mode 100644
index 0000000..9074d6d
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/pbuffer/PBufferUniqueGraphics.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/renderer/DefaultLineStripRenderer.class b/lib/json-20180813/org/newdawn/slick/opengl/renderer/DefaultLineStripRenderer.class
new file mode 100644
index 0000000..023777d
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/renderer/DefaultLineStripRenderer.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/renderer/ImmediateModeOGLRenderer.class b/lib/json-20180813/org/newdawn/slick/opengl/renderer/ImmediateModeOGLRenderer.class
new file mode 100644
index 0000000..0c6f408
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/renderer/ImmediateModeOGLRenderer.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/renderer/LineStripRenderer.class b/lib/json-20180813/org/newdawn/slick/opengl/renderer/LineStripRenderer.class
new file mode 100644
index 0000000..70f8052
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/renderer/LineStripRenderer.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/renderer/QuadBasedLineStripRenderer.class b/lib/json-20180813/org/newdawn/slick/opengl/renderer/QuadBasedLineStripRenderer.class
new file mode 100644
index 0000000..76ca6c4
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/renderer/QuadBasedLineStripRenderer.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/renderer/Renderer.class b/lib/json-20180813/org/newdawn/slick/opengl/renderer/Renderer.class
new file mode 100644
index 0000000..6fc4d0d
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/renderer/Renderer.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/renderer/SGL.class b/lib/json-20180813/org/newdawn/slick/opengl/renderer/SGL.class
new file mode 100644
index 0000000..a151ac5
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/renderer/SGL.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/opengl/renderer/VAOGLRenderer.class b/lib/json-20180813/org/newdawn/slick/opengl/renderer/VAOGLRenderer.class
new file mode 100644
index 0000000..c827ed5
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/opengl/renderer/VAOGLRenderer.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$1.class b/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$1.class
new file mode 100644
index 0000000..7891245
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$ColorRecord.class b/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$ColorRecord.class
new file mode 100644
index 0000000..5a47cc3
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$ColorRecord.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$LinearInterpolator.class b/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$LinearInterpolator.class
new file mode 100644
index 0000000..cb1eac5
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$LinearInterpolator.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$RandomValue.class b/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$RandomValue.class
new file mode 100644
index 0000000..cc79b8c
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$RandomValue.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$Range.class b/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$Range.class
new file mode 100644
index 0000000..32d68be
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$Range.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$SimpleValue.class b/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$SimpleValue.class
new file mode 100644
index 0000000..2d93b6f
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$SimpleValue.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$Value.class b/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$Value.class
new file mode 100644
index 0000000..5f15e4f
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter$Value.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter.class b/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter.class
new file mode 100644
index 0000000..a2ac142
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitter.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitterFactory.class b/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitterFactory.class
new file mode 100644
index 0000000..7583218
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/particles/ConfigurableEmitterFactory.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/particles/Particle.class b/lib/json-20180813/org/newdawn/slick/particles/Particle.class
new file mode 100644
index 0000000..ef0a6cb
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/particles/Particle.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/particles/ParticleEmitter.class b/lib/json-20180813/org/newdawn/slick/particles/ParticleEmitter.class
new file mode 100644
index 0000000..6e6b753
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/particles/ParticleEmitter.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/particles/ParticleIO$1.class b/lib/json-20180813/org/newdawn/slick/particles/ParticleIO$1.class
new file mode 100644
index 0000000..155a3be
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/particles/ParticleIO$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/particles/ParticleIO$2.class b/lib/json-20180813/org/newdawn/slick/particles/ParticleIO$2.class
new file mode 100644
index 0000000..b2cb434
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/particles/ParticleIO$2.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/particles/ParticleIO.class b/lib/json-20180813/org/newdawn/slick/particles/ParticleIO.class
new file mode 100644
index 0000000..6f424ca
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/particles/ParticleIO.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/particles/ParticleSystem$1.class b/lib/json-20180813/org/newdawn/slick/particles/ParticleSystem$1.class
new file mode 100644
index 0000000..ff4d4ab
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/particles/ParticleSystem$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/particles/ParticleSystem$ParticlePool.class b/lib/json-20180813/org/newdawn/slick/particles/ParticleSystem$ParticlePool.class
new file mode 100644
index 0000000..613e408
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/particles/ParticleSystem$ParticlePool.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/particles/ParticleSystem.class b/lib/json-20180813/org/newdawn/slick/particles/ParticleSystem.class
new file mode 100644
index 0000000..ca01bbf
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/particles/ParticleSystem.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/particles/effects/FireEmitter.class b/lib/json-20180813/org/newdawn/slick/particles/effects/FireEmitter.class
new file mode 100644
index 0000000..21b7cdf
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/particles/effects/FireEmitter.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/state/BasicGameState.class b/lib/json-20180813/org/newdawn/slick/state/BasicGameState.class
new file mode 100644
index 0000000..833bc14
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/state/BasicGameState.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/state/GameState.class b/lib/json-20180813/org/newdawn/slick/state/GameState.class
new file mode 100644
index 0000000..92cc278
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/state/GameState.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/state/StateBasedGame$1.class b/lib/json-20180813/org/newdawn/slick/state/StateBasedGame$1.class
new file mode 100644
index 0000000..48e4639
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/state/StateBasedGame$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/state/StateBasedGame.class b/lib/json-20180813/org/newdawn/slick/state/StateBasedGame.class
new file mode 100644
index 0000000..7d71c96
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/state/StateBasedGame.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/state/transition/BlobbyTransition$Blob.class b/lib/json-20180813/org/newdawn/slick/state/transition/BlobbyTransition$Blob.class
new file mode 100644
index 0000000..467635e
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/state/transition/BlobbyTransition$Blob.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/state/transition/BlobbyTransition.class b/lib/json-20180813/org/newdawn/slick/state/transition/BlobbyTransition.class
new file mode 100644
index 0000000..b7b737e
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/state/transition/BlobbyTransition.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/state/transition/CombinedTransition.class b/lib/json-20180813/org/newdawn/slick/state/transition/CombinedTransition.class
new file mode 100644
index 0000000..5892063
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/state/transition/CombinedTransition.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/state/transition/CrossStateTransition.class b/lib/json-20180813/org/newdawn/slick/state/transition/CrossStateTransition.class
new file mode 100644
index 0000000..e21c6d1
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/state/transition/CrossStateTransition.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/state/transition/EmptyTransition.class b/lib/json-20180813/org/newdawn/slick/state/transition/EmptyTransition.class
new file mode 100644
index 0000000..458a0bc
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/state/transition/EmptyTransition.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/state/transition/FadeInTransition.class b/lib/json-20180813/org/newdawn/slick/state/transition/FadeInTransition.class
new file mode 100644
index 0000000..fb940ea
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/state/transition/FadeInTransition.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/state/transition/FadeOutTransition.class b/lib/json-20180813/org/newdawn/slick/state/transition/FadeOutTransition.class
new file mode 100644
index 0000000..dc11710
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/state/transition/FadeOutTransition.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/state/transition/HorizontalSplitTransition.class b/lib/json-20180813/org/newdawn/slick/state/transition/HorizontalSplitTransition.class
new file mode 100644
index 0000000..8f4e2bf
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/state/transition/HorizontalSplitTransition.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/state/transition/RotateTransition.class b/lib/json-20180813/org/newdawn/slick/state/transition/RotateTransition.class
new file mode 100644
index 0000000..3ca7698
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/state/transition/RotateTransition.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/state/transition/SelectTransition.class b/lib/json-20180813/org/newdawn/slick/state/transition/SelectTransition.class
new file mode 100644
index 0000000..d339ddd
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/state/transition/SelectTransition.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/state/transition/Transition.class b/lib/json-20180813/org/newdawn/slick/state/transition/Transition.class
new file mode 100644
index 0000000..bf3721f
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/state/transition/Transition.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/state/transition/VerticalSplitTransition.class b/lib/json-20180813/org/newdawn/slick/state/transition/VerticalSplitTransition.class
new file mode 100644
index 0000000..18391b2
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/state/transition/VerticalSplitTransition.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/Diagram.class b/lib/json-20180813/org/newdawn/slick/svg/Diagram.class
new file mode 100644
index 0000000..ed59138
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/Diagram.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/Figure.class b/lib/json-20180813/org/newdawn/slick/svg/Figure.class
new file mode 100644
index 0000000..b4bd439
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/Figure.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/Gradient$Step.class b/lib/json-20180813/org/newdawn/slick/svg/Gradient$Step.class
new file mode 100644
index 0000000..4fa4d94
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/Gradient$Step.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/Gradient.class b/lib/json-20180813/org/newdawn/slick/svg/Gradient.class
new file mode 100644
index 0000000..006ede0
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/Gradient.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/InkscapeLoader$1.class b/lib/json-20180813/org/newdawn/slick/svg/InkscapeLoader$1.class
new file mode 100644
index 0000000..5bd9b0b
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/InkscapeLoader$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/InkscapeLoader.class b/lib/json-20180813/org/newdawn/slick/svg/InkscapeLoader.class
new file mode 100644
index 0000000..4bb5a07
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/InkscapeLoader.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/LinearGradientFill.class b/lib/json-20180813/org/newdawn/slick/svg/LinearGradientFill.class
new file mode 100644
index 0000000..e0afff8
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/LinearGradientFill.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/Loader.class b/lib/json-20180813/org/newdawn/slick/svg/Loader.class
new file mode 100644
index 0000000..a8441f6
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/Loader.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/NonGeometricData.class b/lib/json-20180813/org/newdawn/slick/svg/NonGeometricData.class
new file mode 100644
index 0000000..b5aff32
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/NonGeometricData.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/ParsingException.class b/lib/json-20180813/org/newdawn/slick/svg/ParsingException.class
new file mode 100644
index 0000000..0c0ee92
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/ParsingException.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/RadialGradientFill.class b/lib/json-20180813/org/newdawn/slick/svg/RadialGradientFill.class
new file mode 100644
index 0000000..3124d76
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/RadialGradientFill.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/SVGMorph.class b/lib/json-20180813/org/newdawn/slick/svg/SVGMorph.class
new file mode 100644
index 0000000..b48d586
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/SVGMorph.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/SimpleDiagramRenderer.class b/lib/json-20180813/org/newdawn/slick/svg/SimpleDiagramRenderer.class
new file mode 100644
index 0000000..0325e3d
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/SimpleDiagramRenderer.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/inkscape/DefsProcessor.class b/lib/json-20180813/org/newdawn/slick/svg/inkscape/DefsProcessor.class
new file mode 100644
index 0000000..74f977c
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/inkscape/DefsProcessor.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/inkscape/ElementProcessor.class b/lib/json-20180813/org/newdawn/slick/svg/inkscape/ElementProcessor.class
new file mode 100644
index 0000000..20897b7
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/inkscape/ElementProcessor.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/inkscape/EllipseProcessor.class b/lib/json-20180813/org/newdawn/slick/svg/inkscape/EllipseProcessor.class
new file mode 100644
index 0000000..91537a5
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/inkscape/EllipseProcessor.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/inkscape/GroupProcessor.class b/lib/json-20180813/org/newdawn/slick/svg/inkscape/GroupProcessor.class
new file mode 100644
index 0000000..f47724e
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/inkscape/GroupProcessor.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/inkscape/InkscapeNonGeometricData.class b/lib/json-20180813/org/newdawn/slick/svg/inkscape/InkscapeNonGeometricData.class
new file mode 100644
index 0000000..4ab9bb6
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/inkscape/InkscapeNonGeometricData.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/inkscape/LineProcessor.class b/lib/json-20180813/org/newdawn/slick/svg/inkscape/LineProcessor.class
new file mode 100644
index 0000000..5a39e8b
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/inkscape/LineProcessor.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/inkscape/PathProcessor.class b/lib/json-20180813/org/newdawn/slick/svg/inkscape/PathProcessor.class
new file mode 100644
index 0000000..291cf2d
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/inkscape/PathProcessor.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/inkscape/PolygonProcessor.class b/lib/json-20180813/org/newdawn/slick/svg/inkscape/PolygonProcessor.class
new file mode 100644
index 0000000..bde51b1
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/inkscape/PolygonProcessor.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/inkscape/RectProcessor.class b/lib/json-20180813/org/newdawn/slick/svg/inkscape/RectProcessor.class
new file mode 100644
index 0000000..9dab1f3
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/inkscape/RectProcessor.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/inkscape/UseProcessor.class b/lib/json-20180813/org/newdawn/slick/svg/inkscape/UseProcessor.class
new file mode 100644
index 0000000..3855ff6
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/inkscape/UseProcessor.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/svg/inkscape/Util.class b/lib/json-20180813/org/newdawn/slick/svg/inkscape/Util.class
new file mode 100644
index 0000000..5a9030b
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/svg/inkscape/Util.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/AlphaMapTest.class b/lib/json-20180813/org/newdawn/slick/tests/AlphaMapTest.class
new file mode 100644
index 0000000..5dfb8f9
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/AlphaMapTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/AnimationTest.class b/lib/json-20180813/org/newdawn/slick/tests/AnimationTest.class
new file mode 100644
index 0000000..ac41aa0
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/AnimationTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/AntiAliasTest.class b/lib/json-20180813/org/newdawn/slick/tests/AntiAliasTest.class
new file mode 100644
index 0000000..ee9cd87
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/AntiAliasTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/BigImageTest.class b/lib/json-20180813/org/newdawn/slick/tests/BigImageTest.class
new file mode 100644
index 0000000..c9cb530
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/BigImageTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/BigSpriteSheetTest.class b/lib/json-20180813/org/newdawn/slick/tests/BigSpriteSheetTest.class
new file mode 100644
index 0000000..3da68b6
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/BigSpriteSheetTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/CachedRenderTest$1.class b/lib/json-20180813/org/newdawn/slick/tests/CachedRenderTest$1.class
new file mode 100644
index 0000000..526901f
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/CachedRenderTest$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/CachedRenderTest.class b/lib/json-20180813/org/newdawn/slick/tests/CachedRenderTest.class
new file mode 100644
index 0000000..c796b43
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/CachedRenderTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/CanvasContainerTest$1.class b/lib/json-20180813/org/newdawn/slick/tests/CanvasContainerTest$1.class
new file mode 100644
index 0000000..890cfc1
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/CanvasContainerTest$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/CanvasContainerTest.class b/lib/json-20180813/org/newdawn/slick/tests/CanvasContainerTest.class
new file mode 100644
index 0000000..ddb5ec5
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/CanvasContainerTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/CanvasSizeTest$1.class b/lib/json-20180813/org/newdawn/slick/tests/CanvasSizeTest$1.class
new file mode 100644
index 0000000..3c6a5f6
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/CanvasSizeTest$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/CanvasSizeTest.class b/lib/json-20180813/org/newdawn/slick/tests/CanvasSizeTest.class
new file mode 100644
index 0000000..53a5b52
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/CanvasSizeTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/ClipTest.class b/lib/json-20180813/org/newdawn/slick/tests/ClipTest.class
new file mode 100644
index 0000000..897b737
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/ClipTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/CopyAreaAlphaTest.class b/lib/json-20180813/org/newdawn/slick/tests/CopyAreaAlphaTest.class
new file mode 100644
index 0000000..f4b6730
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/CopyAreaAlphaTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/CurveTest.class b/lib/json-20180813/org/newdawn/slick/tests/CurveTest.class
new file mode 100644
index 0000000..8bba76c
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/CurveTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/DeferredLoadingTest.class b/lib/json-20180813/org/newdawn/slick/tests/DeferredLoadingTest.class
new file mode 100644
index 0000000..1327fde
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/DeferredLoadingTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/DistanceFieldTest.class b/lib/json-20180813/org/newdawn/slick/tests/DistanceFieldTest.class
new file mode 100644
index 0000000..5be8b68
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/DistanceFieldTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/DoubleClickTest.class b/lib/json-20180813/org/newdawn/slick/tests/DoubleClickTest.class
new file mode 100644
index 0000000..6b53b01
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/DoubleClickTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/DuplicateEmitterTest.class b/lib/json-20180813/org/newdawn/slick/tests/DuplicateEmitterTest.class
new file mode 100644
index 0000000..7e90847
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/DuplicateEmitterTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/FlashTest.class b/lib/json-20180813/org/newdawn/slick/tests/FlashTest.class
new file mode 100644
index 0000000..08f3a81
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/FlashTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/FontPerformanceTest.class b/lib/json-20180813/org/newdawn/slick/tests/FontPerformanceTest.class
new file mode 100644
index 0000000..87ceb9a
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/FontPerformanceTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/FontTest.class b/lib/json-20180813/org/newdawn/slick/tests/FontTest.class
new file mode 100644
index 0000000..9f4d9f1
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/FontTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/GUITest$1.class b/lib/json-20180813/org/newdawn/slick/tests/GUITest$1.class
new file mode 100644
index 0000000..285fd47
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/GUITest$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/GUITest$2.class b/lib/json-20180813/org/newdawn/slick/tests/GUITest$2.class
new file mode 100644
index 0000000..dd566f0
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/GUITest$2.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/GUITest.class b/lib/json-20180813/org/newdawn/slick/tests/GUITest.class
new file mode 100644
index 0000000..70280d2
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/GUITest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/GeomAccuracyTest.class b/lib/json-20180813/org/newdawn/slick/tests/GeomAccuracyTest.class
new file mode 100644
index 0000000..2c6d58e
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/GeomAccuracyTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/GeomTest.class b/lib/json-20180813/org/newdawn/slick/tests/GeomTest.class
new file mode 100644
index 0000000..e6b5ac3
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/GeomTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/GeomUtilTest.class b/lib/json-20180813/org/newdawn/slick/tests/GeomUtilTest.class
new file mode 100644
index 0000000..aa7cd80
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/GeomUtilTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/GeomUtilTileTest.class b/lib/json-20180813/org/newdawn/slick/tests/GeomUtilTileTest.class
new file mode 100644
index 0000000..f3a74d1
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/GeomUtilTileTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/GradientImageTest.class b/lib/json-20180813/org/newdawn/slick/tests/GradientImageTest.class
new file mode 100644
index 0000000..aef9ecf
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/GradientImageTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/GradientTest.class b/lib/json-20180813/org/newdawn/slick/tests/GradientTest.class
new file mode 100644
index 0000000..af497b6
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/GradientTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/GraphicsTest.class b/lib/json-20180813/org/newdawn/slick/tests/GraphicsTest.class
new file mode 100644
index 0000000..8c221c3
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/GraphicsTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/ImageBufferEndianTest.class b/lib/json-20180813/org/newdawn/slick/tests/ImageBufferEndianTest.class
new file mode 100644
index 0000000..2811ace
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/ImageBufferEndianTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/ImageBufferTest.class b/lib/json-20180813/org/newdawn/slick/tests/ImageBufferTest.class
new file mode 100644
index 0000000..3a05e42
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/ImageBufferTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/ImageCornerTest.class b/lib/json-20180813/org/newdawn/slick/tests/ImageCornerTest.class
new file mode 100644
index 0000000..eab9f04
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/ImageCornerTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/ImageGraphicsTest.class b/lib/json-20180813/org/newdawn/slick/tests/ImageGraphicsTest.class
new file mode 100644
index 0000000..5052a51
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/ImageGraphicsTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/ImageMemTest.class b/lib/json-20180813/org/newdawn/slick/tests/ImageMemTest.class
new file mode 100644
index 0000000..e277bcd
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/ImageMemTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/ImageOutTest.class b/lib/json-20180813/org/newdawn/slick/tests/ImageOutTest.class
new file mode 100644
index 0000000..31dbf21
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/ImageOutTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/ImageReadTest.class b/lib/json-20180813/org/newdawn/slick/tests/ImageReadTest.class
new file mode 100644
index 0000000..af33c63
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/ImageReadTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/ImageTest.class b/lib/json-20180813/org/newdawn/slick/tests/ImageTest.class
new file mode 100644
index 0000000..5a6691f
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/ImageTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/InkscapeTest.class b/lib/json-20180813/org/newdawn/slick/tests/InkscapeTest.class
new file mode 100644
index 0000000..cdf5566
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/InkscapeTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/InputProviderTest.class b/lib/json-20180813/org/newdawn/slick/tests/InputProviderTest.class
new file mode 100644
index 0000000..53a3d47
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/InputProviderTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/InputTest$Line.class b/lib/json-20180813/org/newdawn/slick/tests/InputTest$Line.class
new file mode 100644
index 0000000..1310141
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/InputTest$Line.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/InputTest.class b/lib/json-20180813/org/newdawn/slick/tests/InputTest.class
new file mode 100644
index 0000000..a929c9a
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/InputTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/IsoTiledTest.class b/lib/json-20180813/org/newdawn/slick/tests/IsoTiledTest.class
new file mode 100644
index 0000000..47178d8
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/IsoTiledTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/KeyRepeatTest.class b/lib/json-20180813/org/newdawn/slick/tests/KeyRepeatTest.class
new file mode 100644
index 0000000..1c52c8f
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/KeyRepeatTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/LameTest.class b/lib/json-20180813/org/newdawn/slick/tests/LameTest.class
new file mode 100644
index 0000000..a100030
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/LameTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/LineRenderTest.class b/lib/json-20180813/org/newdawn/slick/tests/LineRenderTest.class
new file mode 100644
index 0000000..3158116
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/LineRenderTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/MorphSVGTest.class b/lib/json-20180813/org/newdawn/slick/tests/MorphSVGTest.class
new file mode 100644
index 0000000..495c06a
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/MorphSVGTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/MorphShapeTest.class b/lib/json-20180813/org/newdawn/slick/tests/MorphShapeTest.class
new file mode 100644
index 0000000..10d33c8
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/MorphShapeTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/MusicListenerTest.class b/lib/json-20180813/org/newdawn/slick/tests/MusicListenerTest.class
new file mode 100644
index 0000000..0e668bf
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/MusicListenerTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/NavMeshTest$DataMap.class b/lib/json-20180813/org/newdawn/slick/tests/NavMeshTest$DataMap.class
new file mode 100644
index 0000000..78fdea4
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/NavMeshTest$DataMap.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/NavMeshTest.class b/lib/json-20180813/org/newdawn/slick/tests/NavMeshTest.class
new file mode 100644
index 0000000..39e7973
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/NavMeshTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/PackedSheetTest.class b/lib/json-20180813/org/newdawn/slick/tests/PackedSheetTest.class
new file mode 100644
index 0000000..0ad0b12
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/PackedSheetTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/ParticleTest.class b/lib/json-20180813/org/newdawn/slick/tests/ParticleTest.class
new file mode 100644
index 0000000..7ee54ee
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/ParticleTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/PedigreeTest.class b/lib/json-20180813/org/newdawn/slick/tests/PedigreeTest.class
new file mode 100644
index 0000000..0fa918c
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/PedigreeTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/PolygonTest.class b/lib/json-20180813/org/newdawn/slick/tests/PolygonTest.class
new file mode 100644
index 0000000..cf20ecf
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/PolygonTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/PureFontTest.class b/lib/json-20180813/org/newdawn/slick/tests/PureFontTest.class
new file mode 100644
index 0000000..aae159e
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/PureFontTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/SavedStateTest.class b/lib/json-20180813/org/newdawn/slick/tests/SavedStateTest.class
new file mode 100644
index 0000000..86c9fca
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/SavedStateTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/ScalableTest$1.class b/lib/json-20180813/org/newdawn/slick/tests/ScalableTest$1.class
new file mode 100644
index 0000000..218a88c
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/ScalableTest$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/ScalableTest.class b/lib/json-20180813/org/newdawn/slick/tests/ScalableTest.class
new file mode 100644
index 0000000..d2b1283
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/ScalableTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/ShapeTest.class b/lib/json-20180813/org/newdawn/slick/tests/ShapeTest.class
new file mode 100644
index 0000000..8943100
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/ShapeTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/SlickCallableTest$1.class b/lib/json-20180813/org/newdawn/slick/tests/SlickCallableTest$1.class
new file mode 100644
index 0000000..5380d66
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/SlickCallableTest$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/SlickCallableTest.class b/lib/json-20180813/org/newdawn/slick/tests/SlickCallableTest.class
new file mode 100644
index 0000000..f6c121b
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/SlickCallableTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/SoundPositionTest.class b/lib/json-20180813/org/newdawn/slick/tests/SoundPositionTest.class
new file mode 100644
index 0000000..22598d4
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/SoundPositionTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/SoundTest.class b/lib/json-20180813/org/newdawn/slick/tests/SoundTest.class
new file mode 100644
index 0000000..e792cbf
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/SoundTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/SoundURLTest.class b/lib/json-20180813/org/newdawn/slick/tests/SoundURLTest.class
new file mode 100644
index 0000000..9b9d1ed
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/SoundURLTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/SpriteSheetFontTest.class b/lib/json-20180813/org/newdawn/slick/tests/SpriteSheetFontTest.class
new file mode 100644
index 0000000..d5c75c1
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/SpriteSheetFontTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/StateBasedTest.class b/lib/json-20180813/org/newdawn/slick/tests/StateBasedTest.class
new file mode 100644
index 0000000..e95a8c1
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/StateBasedTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/TestBox$1.class b/lib/json-20180813/org/newdawn/slick/tests/TestBox$1.class
new file mode 100644
index 0000000..4273772
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/TestBox$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/TestBox.class b/lib/json-20180813/org/newdawn/slick/tests/TestBox.class
new file mode 100644
index 0000000..8c3636b
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/TestBox.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/TestUtils.class b/lib/json-20180813/org/newdawn/slick/tests/TestUtils.class
new file mode 100644
index 0000000..f0bc087
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/TestUtils.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/TexturePaintTest$1.class b/lib/json-20180813/org/newdawn/slick/tests/TexturePaintTest$1.class
new file mode 100644
index 0000000..7ca1259
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/TexturePaintTest$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/TexturePaintTest.class b/lib/json-20180813/org/newdawn/slick/tests/TexturePaintTest.class
new file mode 100644
index 0000000..70f60b7
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/TexturePaintTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/TileMapTest.class b/lib/json-20180813/org/newdawn/slick/tests/TileMapTest.class
new file mode 100644
index 0000000..efcdc08
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/TileMapTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/TransformTest.class b/lib/json-20180813/org/newdawn/slick/tests/TransformTest.class
new file mode 100644
index 0000000..6bc1b11
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/TransformTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/TransformTest2.class b/lib/json-20180813/org/newdawn/slick/tests/TransformTest2.class
new file mode 100644
index 0000000..787ac4d
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/TransformTest2.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/TransitionTest$ImageState.class b/lib/json-20180813/org/newdawn/slick/tests/TransitionTest$ImageState.class
new file mode 100644
index 0000000..204608e
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/TransitionTest$ImageState.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/TransitionTest.class b/lib/json-20180813/org/newdawn/slick/tests/TransitionTest.class
new file mode 100644
index 0000000..6aa5650
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/TransitionTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/TransparentColorTest.class b/lib/json-20180813/org/newdawn/slick/tests/TransparentColorTest.class
new file mode 100644
index 0000000..306584e
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/TransparentColorTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/TrueTypeFontPerformanceTest.class b/lib/json-20180813/org/newdawn/slick/tests/TrueTypeFontPerformanceTest.class
new file mode 100644
index 0000000..96fe4dc
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/TrueTypeFontPerformanceTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/UnicodeFontTest.class b/lib/json-20180813/org/newdawn/slick/tests/UnicodeFontTest.class
new file mode 100644
index 0000000..ef8164f
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/UnicodeFontTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/states/TestState1$1.class b/lib/json-20180813/org/newdawn/slick/tests/states/TestState1$1.class
new file mode 100644
index 0000000..a71ae62
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/states/TestState1$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/states/TestState1.class b/lib/json-20180813/org/newdawn/slick/tests/states/TestState1.class
new file mode 100644
index 0000000..7c9d3aa
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/states/TestState1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/states/TestState2.class b/lib/json-20180813/org/newdawn/slick/tests/states/TestState2.class
new file mode 100644
index 0000000..b9d4fdf
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/states/TestState2.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/states/TestState3.class b/lib/json-20180813/org/newdawn/slick/tests/states/TestState3.class
new file mode 100644
index 0000000..5220609
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/states/TestState3.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/xml/Entity.class b/lib/json-20180813/org/newdawn/slick/tests/xml/Entity.class
new file mode 100644
index 0000000..2556f34
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/xml/Entity.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/xml/GameData.class b/lib/json-20180813/org/newdawn/slick/tests/xml/GameData.class
new file mode 100644
index 0000000..dd4c779
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/xml/GameData.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/xml/Inventory.class b/lib/json-20180813/org/newdawn/slick/tests/xml/Inventory.class
new file mode 100644
index 0000000..b9f2e6b
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/xml/Inventory.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/xml/Item.class b/lib/json-20180813/org/newdawn/slick/tests/xml/Item.class
new file mode 100644
index 0000000..d98a377
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/xml/Item.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/xml/ItemContainer.class b/lib/json-20180813/org/newdawn/slick/tests/xml/ItemContainer.class
new file mode 100644
index 0000000..6285982
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/xml/ItemContainer.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/xml/ObjectParserTest.class b/lib/json-20180813/org/newdawn/slick/tests/xml/ObjectParserTest.class
new file mode 100644
index 0000000..7874316
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/xml/ObjectParserTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/xml/Stats.class b/lib/json-20180813/org/newdawn/slick/tests/xml/Stats.class
new file mode 100644
index 0000000..17e5669
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/xml/Stats.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tests/xml/XMLTest.class b/lib/json-20180813/org/newdawn/slick/tests/xml/XMLTest.class
new file mode 100644
index 0000000..980ce42
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tests/xml/XMLTest.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tiled/Layer.class b/lib/json-20180813/org/newdawn/slick/tiled/Layer.class
new file mode 100644
index 0000000..e9ab49c
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tiled/Layer.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tiled/TileSet.class b/lib/json-20180813/org/newdawn/slick/tiled/TileSet.class
new file mode 100644
index 0000000..4170667
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tiled/TileSet.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tiled/TiledMap$1.class b/lib/json-20180813/org/newdawn/slick/tiled/TiledMap$1.class
new file mode 100644
index 0000000..f3c4ac2
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tiled/TiledMap$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tiled/TiledMap$GroupObject.class b/lib/json-20180813/org/newdawn/slick/tiled/TiledMap$GroupObject.class
new file mode 100644
index 0000000..7cc9f2e
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tiled/TiledMap$GroupObject.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tiled/TiledMap$ObjectGroup.class b/lib/json-20180813/org/newdawn/slick/tiled/TiledMap$ObjectGroup.class
new file mode 100644
index 0000000..19e1907
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tiled/TiledMap$ObjectGroup.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/tiled/TiledMap.class b/lib/json-20180813/org/newdawn/slick/tiled/TiledMap.class
new file mode 100644
index 0000000..a8a6b8d
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/tiled/TiledMap.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/Bootstrap.class b/lib/json-20180813/org/newdawn/slick/util/Bootstrap.class
new file mode 100644
index 0000000..48be4af
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/Bootstrap.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/BufferedImageUtil.class b/lib/json-20180813/org/newdawn/slick/util/BufferedImageUtil.class
new file mode 100644
index 0000000..eaf46b6
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/BufferedImageUtil.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/ClasspathLocation.class b/lib/json-20180813/org/newdawn/slick/util/ClasspathLocation.class
new file mode 100644
index 0000000..a64812b
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/ClasspathLocation.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/DefaultLogSystem.class b/lib/json-20180813/org/newdawn/slick/util/DefaultLogSystem.class
new file mode 100644
index 0000000..50c6ab7
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/DefaultLogSystem.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/FastTrig.class b/lib/json-20180813/org/newdawn/slick/util/FastTrig.class
new file mode 100644
index 0000000..2c4e0a3
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/FastTrig.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/FileSystemLocation.class b/lib/json-20180813/org/newdawn/slick/util/FileSystemLocation.class
new file mode 100644
index 0000000..0e1bee1
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/FileSystemLocation.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/FontUtils$Alignment.class b/lib/json-20180813/org/newdawn/slick/util/FontUtils$Alignment.class
new file mode 100644
index 0000000..073b85b
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/FontUtils$Alignment.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/FontUtils.class b/lib/json-20180813/org/newdawn/slick/util/FontUtils.class
new file mode 100644
index 0000000..0100949
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/FontUtils.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/InputAdapter.class b/lib/json-20180813/org/newdawn/slick/util/InputAdapter.class
new file mode 100644
index 0000000..e515986
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/InputAdapter.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/LocatedImage.class b/lib/json-20180813/org/newdawn/slick/util/LocatedImage.class
new file mode 100644
index 0000000..81576eb
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/LocatedImage.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/Log$1.class b/lib/json-20180813/org/newdawn/slick/util/Log$1.class
new file mode 100644
index 0000000..2b82918
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/Log$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/Log.class b/lib/json-20180813/org/newdawn/slick/util/Log.class
new file mode 100644
index 0000000..36d0e6e
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/Log.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/LogSystem.class b/lib/json-20180813/org/newdawn/slick/util/LogSystem.class
new file mode 100644
index 0000000..29785b4
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/LogSystem.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/MaskUtil.class b/lib/json-20180813/org/newdawn/slick/util/MaskUtil.class
new file mode 100644
index 0000000..b661df4
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/MaskUtil.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/OperationNotSupportedException.class b/lib/json-20180813/org/newdawn/slick/util/OperationNotSupportedException.class
new file mode 100644
index 0000000..524adf1
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/OperationNotSupportedException.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/ResourceLoader.class b/lib/json-20180813/org/newdawn/slick/util/ResourceLoader.class
new file mode 100644
index 0000000..afc0dd1
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/ResourceLoader.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/ResourceLocation.class b/lib/json-20180813/org/newdawn/slick/util/ResourceLocation.class
new file mode 100644
index 0000000..fe91c4e
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/ResourceLocation.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/AStarHeuristic.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/AStarHeuristic.class
new file mode 100644
index 0000000..cfc48c1
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/AStarHeuristic.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/AStarPathFinder$1.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/AStarPathFinder$1.class
new file mode 100644
index 0000000..c4add40
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/AStarPathFinder$1.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/AStarPathFinder$Node.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/AStarPathFinder$Node.class
new file mode 100644
index 0000000..323e3b1
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/AStarPathFinder$Node.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/AStarPathFinder$PriorityList.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/AStarPathFinder$PriorityList.class
new file mode 100644
index 0000000..621e6d9
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/AStarPathFinder$PriorityList.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/AStarPathFinder.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/AStarPathFinder.class
new file mode 100644
index 0000000..17fddb0
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/AStarPathFinder.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/Mover.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/Mover.class
new file mode 100644
index 0000000..02f0b93
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/Mover.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/Path$Step.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/Path$Step.class
new file mode 100644
index 0000000..ba425f4
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/Path$Step.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/Path.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/Path.class
new file mode 100644
index 0000000..1fb3ae5
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/Path.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/PathFinder.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/PathFinder.class
new file mode 100644
index 0000000..a9a21fe
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/PathFinder.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/PathFindingContext.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/PathFindingContext.class
new file mode 100644
index 0000000..f2eed27
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/PathFindingContext.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/TileBasedMap.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/TileBasedMap.class
new file mode 100644
index 0000000..bb28819
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/TileBasedMap.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/heuristics/ClosestHeuristic.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/heuristics/ClosestHeuristic.class
new file mode 100644
index 0000000..8447864
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/heuristics/ClosestHeuristic.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/heuristics/ClosestSquaredHeuristic.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/heuristics/ClosestSquaredHeuristic.class
new file mode 100644
index 0000000..b502a0f
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/heuristics/ClosestSquaredHeuristic.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/heuristics/ManhattanHeuristic.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/heuristics/ManhattanHeuristic.class
new file mode 100644
index 0000000..5f2c6aa
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/heuristics/ManhattanHeuristic.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/navmesh/Link.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/navmesh/Link.class
new file mode 100644
index 0000000..c6650d0
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/navmesh/Link.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/navmesh/NavMesh.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/navmesh/NavMesh.class
new file mode 100644
index 0000000..2c2de5d
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/navmesh/NavMesh.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/navmesh/NavMeshBuilder.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/navmesh/NavMeshBuilder.class
new file mode 100644
index 0000000..67015ec
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/navmesh/NavMeshBuilder.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/navmesh/NavPath.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/navmesh/NavPath.class
new file mode 100644
index 0000000..566e43b
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/navmesh/NavPath.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/pathfinding/navmesh/Space.class b/lib/json-20180813/org/newdawn/slick/util/pathfinding/navmesh/Space.class
new file mode 100644
index 0000000..784a930
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/pathfinding/navmesh/Space.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/xml/ObjectTreeParser.class b/lib/json-20180813/org/newdawn/slick/util/xml/ObjectTreeParser.class
new file mode 100644
index 0000000..4466c40
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/xml/ObjectTreeParser.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/xml/SlickXMLException.class b/lib/json-20180813/org/newdawn/slick/util/xml/SlickXMLException.class
new file mode 100644
index 0000000..bcc2dae
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/xml/SlickXMLException.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/xml/XMLElement.class b/lib/json-20180813/org/newdawn/slick/util/xml/XMLElement.class
new file mode 100644
index 0000000..0ac590f
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/xml/XMLElement.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/xml/XMLElementList.class b/lib/json-20180813/org/newdawn/slick/util/xml/XMLElementList.class
new file mode 100644
index 0000000..3dd4527
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/xml/XMLElementList.class differ
diff --git a/lib/json-20180813/org/newdawn/slick/util/xml/XMLParser.class b/lib/json-20180813/org/newdawn/slick/util/xml/XMLParser.class
new file mode 100644
index 0000000..8a4b57a
Binary files /dev/null and b/lib/json-20180813/org/newdawn/slick/util/xml/XMLParser.class differ
diff --git a/lib/json-20180813/version b/lib/json-20180813/version
new file mode 100644
index 0000000..5dd3872
--- /dev/null
+++ b/lib/json-20180813/version
@@ -0,0 +1,3 @@
+#Mon, 03 Jun 2013 22:20:24 +0100
+#Sun May 11 20:17:03 BST 2008
+build=237
diff --git a/lib/json-20180813/win-x64/discord-rpc.dll b/lib/json-20180813/win-x64/discord-rpc.dll
new file mode 100644
index 0000000..8493c54
Binary files /dev/null and b/lib/json-20180813/win-x64/discord-rpc.dll differ
diff --git a/lib/json-20180813/win-x86/discord-rpc.dll b/lib/json-20180813/win-x86/discord-rpc.dll
new file mode 100644
index 0000000..88c7d0c
Binary files /dev/null and b/lib/json-20180813/win-x86/discord-rpc.dll differ
diff --git a/lib/openauth-1.1.2.jar b/lib/openauth-1.1.2.jar
new file mode 100644
index 0000000..329d090
Binary files /dev/null and b/lib/openauth-1.1.2.jar differ
diff --git a/lib/orgjson.jar b/lib/orgjson.jar
new file mode 100644
index 0000000..0b85b0e
Binary files /dev/null and b/lib/orgjson.jar differ
diff --git a/lib/panelstudio-0.2.1 (1).jar b/lib/panelstudio-0.2.1 (1).jar
new file mode 100644
index 0000000..a12828e
Binary files /dev/null and b/lib/panelstudio-0.2.1 (1).jar differ
diff --git a/lib/procbridge-1.1.1.jar b/lib/procbridge-1.1.1.jar
new file mode 100644
index 0000000..a15d73b
Binary files /dev/null and b/lib/procbridge-1.1.1.jar differ
diff --git a/lib/slick.jar b/lib/slick.jar
new file mode 100644
index 0000000..1d3d075
Binary files /dev/null and b/lib/slick.jar differ
diff --git a/lib/vecmath-1.2-1.14.jar b/lib/vecmath-1.2-1.14.jar
new file mode 100644
index 0000000..bf60357
Binary files /dev/null and b/lib/vecmath-1.2-1.14.jar differ
diff --git a/src/EntityRenderer.java b/src/EntityRenderer.java
new file mode 100644
index 0000000..12d830f
--- /dev/null
+++ b/src/EntityRenderer.java
@@ -0,0 +1,2836 @@
+package net.minecraft.client.renderer;
+
+import com.google.common.base.Predicates;
+import com.google.gson.JsonSyntaxException;
+
+import animeware.hud.mod.HudManager;
+import animeware.mainmenu.MainMenu;
+
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.nio.FloatBuffer;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Random;
+import java.util.concurrent.Callable;
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockBed;
+import net.minecraft.block.material.Material;
+import net.minecraft.block.state.IBlockState;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.gui.GuiDownloadTerrain;
+import net.minecraft.client.gui.GuiMainMenu;
+import net.minecraft.client.gui.MapItemRenderer;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.multiplayer.WorldClient;
+import net.minecraft.client.particle.EffectRenderer;
+import net.minecraft.client.renderer.EntityRenderer1;
+import net.minecraft.client.renderer.EntityRenderer2;
+import net.minecraft.client.renderer.culling.ClippingHelperImpl;
+import net.minecraft.client.renderer.culling.Frustum;
+import net.minecraft.client.renderer.texture.DynamicTexture;
+import net.minecraft.client.renderer.texture.TextureMap;
+import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.client.resources.I18n;
+import net.minecraft.client.resources.IResourceManager;
+import net.minecraft.client.resources.IResourceManagerReloadListener;
+import net.minecraft.client.settings.GameSettings;
+import net.minecraft.client.shader.ShaderGroup;
+import net.minecraft.client.shader.ShaderLinkHelper;
+import net.minecraft.crash.CrashReport;
+import net.minecraft.crash.CrashReportCategory;
+import net.minecraft.enchantment.EnchantmentHelper;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.boss.BossStatus;
+import net.minecraft.entity.item.EntityItemFrame;
+import net.minecraft.entity.monster.EntityCreeper;
+import net.minecraft.entity.monster.EntityEnderman;
+import net.minecraft.entity.monster.EntitySpider;
+import net.minecraft.entity.passive.EntityAnimal;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.item.ItemStack;
+import net.minecraft.potion.Potion;
+import net.minecraft.server.integrated.IntegratedServer;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.BlockPos;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EntitySelectors;
+import net.minecraft.util.EnumFacing;
+import net.minecraft.util.EnumParticleTypes;
+import net.minecraft.util.EnumWorldBlockLayer;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.MouseFilter;
+import net.minecraft.util.MovingObjectPosition;
+import net.minecraft.util.ReportedException;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.Vec3;
+import net.minecraft.world.World;
+import net.minecraft.world.WorldProvider;
+import net.minecraft.world.WorldSettings;
+import net.minecraft.world.biome.BiomeGenBase;
+import optifine.Config;
+import optifine.CustomColors;
+import optifine.Lagometer;
+import optifine.RandomMobs;
+import optifine.Reflector;
+import optifine.ReflectorForge;
+import optifine.TextureUtils;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.lwjgl.input.Mouse;
+import org.lwjgl.opengl.Display;
+import org.lwjgl.opengl.GL11;
+import org.lwjgl.opengl.GLContext;
+import org.lwjgl.util.glu.GLU;
+import org.lwjgl.util.glu.Project;
+import shadersmod.client.Shaders;
+import shadersmod.client.ShadersRender;
+
+public class EntityRenderer implements IResourceManagerReloadListener
+{
+ private static final Logger logger = LogManager.getLogger();
+ private static final ResourceLocation locationRainPng = new ResourceLocation("textures/environment/rain.png");
+ private static final ResourceLocation locationSnowPng = new ResourceLocation("textures/environment/snow.png");
+ public static boolean anaglyphEnable;
+
+ /** Anaglyph field (0=R, 1=GB) */
+ public static int anaglyphField;
+
+ /** A reference to the Minecraft object. */
+ private Minecraft mc;
+ private final IResourceManager resourceManager;
+ private Random random = new Random();
+ private float farPlaneDistance;
+ public ItemRenderer itemRenderer;
+ private final MapItemRenderer theMapItemRenderer;
+
+ /** Entity renderer update count */
+ private int rendererUpdateCount;
+
+ /** Pointed entity */
+ private Entity pointedEntity;
+ private MouseFilter mouseFilterXAxis = new MouseFilter();
+ private MouseFilter mouseFilterYAxis = new MouseFilter();
+ private float thirdPersonDistance = 4.0F;
+
+ /** Third person distance temp */
+ private float thirdPersonDistanceTemp = 4.0F;
+
+ /** Smooth cam yaw */
+ private float smoothCamYaw;
+
+ /** Smooth cam pitch */
+ private float smoothCamPitch;
+
+ /** Smooth cam filter X */
+ private float smoothCamFilterX;
+
+ /** Smooth cam filter Y */
+ private float smoothCamFilterY;
+
+ /** Smooth cam partial ticks */
+ private float smoothCamPartialTicks;
+
+ /** FOV modifier hand */
+ private float fovModifierHand;
+
+ /** FOV modifier hand prev */
+ private float fovModifierHandPrev;
+ private float bossColorModifier;
+ private float bossColorModifierPrev;
+
+ /** Cloud fog mode */
+ private boolean cloudFog;
+ private boolean renderHand = true;
+ private boolean drawBlockOutline = true;
+
+ /** Previous frame time in milliseconds */
+ private long prevFrameTime = Minecraft.getSystemTime();
+
+ /** End time of last render (ns) */
+ private long renderEndNanoTime;
+
+ /**
+ * The texture id of the blocklight/skylight texture used for lighting effects
+ */
+ private final DynamicTexture lightmapTexture;
+
+ /**
+ * Colors computed in updateLightmap() and loaded into the lightmap emptyTexture
+ */
+ private final int[] lightmapColors;
+ private final ResourceLocation locationLightMap;
+
+ /**
+ * Is set, updateCameraAndRender() calls updateLightmap(); set by updateTorchFlicker()
+ */
+ private boolean lightmapUpdateNeeded;
+
+ /** Torch flicker X */
+ private float torchFlickerX;
+ private float torchFlickerDX;
+
+ /** Rain sound counter */
+ private int rainSoundCounter;
+ private float[] rainXCoords = new float[1024];
+ private float[] rainYCoords = new float[1024];
+
+ /** Fog color buffer */
+ private FloatBuffer fogColorBuffer = GLAllocation.createDirectFloatBuffer(16);
+ public float fogColorRed;
+ public float fogColorGreen;
+ public float fogColorBlue;
+
+ /** Fog color 2 */
+ private float fogColor2;
+
+ /** Fog color 1 */
+ private float fogColor1;
+ private int debugViewDirection = 0;
+ private boolean debugView = false;
+ private double cameraZoom = 1.0D;
+ private double cameraYaw;
+ private double cameraPitch;
+ private ShaderGroup theShaderGroup;
+ private static final ResourceLocation[] shaderResourceLocations = new ResourceLocation[] {new ResourceLocation("shaders/post/notch.json"), new ResourceLocation("shaders/post/fxaa.json"), new ResourceLocation("shaders/post/art.json"), new ResourceLocation("shaders/post/bumpy.json"), new ResourceLocation("shaders/post/blobs2.json"), new ResourceLocation("shaders/post/pencil.json"), new ResourceLocation("shaders/post/color_convolve.json"), new ResourceLocation("shaders/post/deconverge.json"), new ResourceLocation("shaders/post/flip.json"), new ResourceLocation("shaders/post/invert.json"), new ResourceLocation("shaders/post/ntsc.json"), new ResourceLocation("shaders/post/outline.json"), new ResourceLocation("shaders/post/phosphor.json"), new ResourceLocation("shaders/post/scan_pincushion.json"), new ResourceLocation("shaders/post/sobel.json"), new ResourceLocation("shaders/post/bits.json"), new ResourceLocation("shaders/post/desaturate.json"), new ResourceLocation("shaders/post/green.json"), new ResourceLocation("shaders/post/blur.json"), new ResourceLocation("shaders/post/wobble.json"), new ResourceLocation("shaders/post/blobs.json"), new ResourceLocation("shaders/post/antialias.json"), new ResourceLocation("shaders/post/creeper.json"), new ResourceLocation("shaders/post/spider.json")};
+ public static final int shaderCount = shaderResourceLocations.length;
+ private int shaderIndex;
+ private boolean useShader;
+ public int frameCount;
+ private static final String __OBFID = "CL_00000947";
+ private boolean initialized = false;
+ private World updatedWorld = null;
+ private boolean showDebugInfo = false;
+ public boolean fogStandard = false;
+ private float clipDistance = 128.0F;
+ private long lastServerTime = 0L;
+ private int lastServerTicks = 0;
+ private int serverWaitTime = 0;
+ private int serverWaitTimeCurrent = 0;
+ private float avgServerTimeDiff = 0.0F;
+ private float avgServerTickDiff = 0.0F;
+ private long lastErrorCheckTimeMs = 0L;
+ private ShaderGroup[] fxaaShaders = new ShaderGroup[10];
+
+ public EntityRenderer(Minecraft mcIn, IResourceManager resourceManagerIn)
+ {
+ this.shaderIndex = shaderCount;
+ this.useShader = false;
+ this.frameCount = 0;
+ this.mc = mcIn;
+ this.resourceManager = resourceManagerIn;
+ this.itemRenderer = mcIn.getItemRenderer();
+ this.theMapItemRenderer = new MapItemRenderer(mcIn.getTextureManager());
+ this.lightmapTexture = new DynamicTexture(16, 16);
+ this.locationLightMap = mcIn.getTextureManager().getDynamicTextureLocation("lightMap", this.lightmapTexture);
+ this.lightmapColors = this.lightmapTexture.getTextureData();
+ this.theShaderGroup = null;
+
+ for (int i = 0; i < 32; ++i)
+ {
+ for (int j = 0; j < 32; ++j)
+ {
+ float f = (float)(j - 16);
+ float f1 = (float)(i - 16);
+ float f2 = MathHelper.sqrt_float(f * f + f1 * f1);
+ this.rainXCoords[i << 5 | j] = -f1 / f2;
+ this.rainYCoords[i << 5 | j] = f / f2;
+ }
+ }
+ }
+
+ public boolean isShaderActive()
+ {
+ return OpenGlHelper.shadersSupported && this.theShaderGroup != null;
+ }
+
+ public void func_181022_b()
+ {
+ if (this.theShaderGroup != null)
+ {
+ this.theShaderGroup.deleteShaderGroup();
+ }
+
+ this.theShaderGroup = null;
+ this.shaderIndex = shaderCount;
+ }
+
+ public void switchUseShader()
+ {
+ this.useShader = !this.useShader;
+ }
+
+ /**
+ * What shader to use when spectating this entity
+ */
+ public void loadEntityShader(Entity entityIn)
+ {
+ if (OpenGlHelper.shadersSupported)
+ {
+ if (this.theShaderGroup != null)
+ {
+ this.theShaderGroup.deleteShaderGroup();
+ }
+
+ this.theShaderGroup = null;
+
+ if (entityIn instanceof EntityCreeper)
+ {
+ this.loadShader(new ResourceLocation("shaders/post/creeper.json"));
+ }
+ else if (entityIn instanceof EntitySpider)
+ {
+ this.loadShader(new ResourceLocation("shaders/post/spider.json"));
+ }
+ else if (entityIn instanceof EntityEnderman)
+ {
+ this.loadShader(new ResourceLocation("shaders/post/invert.json"));
+ }
+ else if (Reflector.ForgeHooksClient_loadEntityShader.exists())
+ {
+ Reflector.call(Reflector.ForgeHooksClient_loadEntityShader, new Object[] {entityIn, this});
+ }
+ }
+ }
+
+ public void activateNextShader()
+ {
+ if (OpenGlHelper.shadersSupported && this.mc.getRenderViewEntity() instanceof EntityPlayer)
+ {
+ if (this.theShaderGroup != null)
+ {
+ this.theShaderGroup.deleteShaderGroup();
+ }
+
+ this.shaderIndex = (this.shaderIndex + 1) % (shaderResourceLocations.length + 1);
+
+ if (this.shaderIndex != shaderCount)
+ {
+ this.loadShader(shaderResourceLocations[this.shaderIndex]);
+ }
+ else
+ {
+ this.theShaderGroup = null;
+ }
+ }
+ }
+
+ public void loadShader(ResourceLocation resourceLocationIn)
+ {
+ if (OpenGlHelper.isFramebufferEnabled())
+ {
+ try
+ {
+ this.theShaderGroup = new ShaderGroup(this.mc.getTextureManager(), this.resourceManager, this.mc.getFramebuffer(), resourceLocationIn);
+ this.theShaderGroup.createBindFramebuffers(this.mc.displayWidth, this.mc.displayHeight);
+ this.useShader = true;
+ }
+ catch (IOException ioexception)
+ {
+ logger.warn((String)("Failed to load shader: " + resourceLocationIn), (Throwable)ioexception);
+ this.shaderIndex = shaderCount;
+ this.useShader = false;
+ }
+ catch (JsonSyntaxException jsonsyntaxexception)
+ {
+ logger.warn((String)("Failed to load shader: " + resourceLocationIn), (Throwable)jsonsyntaxexception);
+ this.shaderIndex = shaderCount;
+ this.useShader = false;
+ }
+ }
+ }
+
+ public void onResourceManagerReload(IResourceManager resourceManager)
+ {
+ if (this.theShaderGroup != null)
+ {
+ this.theShaderGroup.deleteShaderGroup();
+ }
+
+ this.theShaderGroup = null;
+
+ if (this.shaderIndex != shaderCount)
+ {
+ this.loadShader(shaderResourceLocations[this.shaderIndex]);
+ }
+ else
+ {
+ this.loadEntityShader(this.mc.getRenderViewEntity());
+ }
+ }
+
+ /**
+ * Updates the entity renderer
+ */
+ public void updateRenderer()
+ {
+ if (OpenGlHelper.shadersSupported && ShaderLinkHelper.getStaticShaderLinkHelper() == null)
+ {
+ ShaderLinkHelper.setNewStaticShaderLinkHelper();
+ }
+
+ this.updateFovModifierHand();
+ this.updateTorchFlicker();
+ this.fogColor2 = this.fogColor1;
+ this.thirdPersonDistanceTemp = this.thirdPersonDistance;
+
+ if (this.mc.gameSettings.smoothCamera)
+ {
+ float f = this.mc.gameSettings.mouseSensitivity * 0.6F + 0.2F;
+ float f1 = f * f * f * 8.0F;
+ this.smoothCamFilterX = this.mouseFilterXAxis.smooth(this.smoothCamYaw, 0.05F * f1);
+ this.smoothCamFilterY = this.mouseFilterYAxis.smooth(this.smoothCamPitch, 0.05F * f1);
+ this.smoothCamPartialTicks = 0.0F;
+ this.smoothCamYaw = 0.0F;
+ this.smoothCamPitch = 0.0F;
+ }
+ else
+ {
+ this.smoothCamFilterX = 0.0F;
+ this.smoothCamFilterY = 0.0F;
+ this.mouseFilterXAxis.reset();
+ this.mouseFilterYAxis.reset();
+ }
+
+ if (this.mc.getRenderViewEntity() == null)
+ {
+ this.mc.setRenderViewEntity(this.mc.thePlayer);
+ }
+
+ Entity entity = this.mc.getRenderViewEntity();
+ double d0 = entity.posX;
+ double d1 = entity.posY + (double)entity.getEyeHeight();
+ double d2 = entity.posZ;
+ float f3 = this.mc.theWorld.getLightBrightness(new BlockPos(d0, d1, d2));
+ float f4 = (float)this.mc.gameSettings.renderDistanceChunks / 16.0F;
+ f4 = MathHelper.clamp_float(f4, 0.0F, 1.0F);
+ float f2 = f3 * (1.0F - f4) + f4;
+ this.fogColor1 += (f2 - this.fogColor1) * 0.1F;
+ ++this.rendererUpdateCount;
+ this.itemRenderer.updateEquippedItem();
+ this.addRainParticles();
+ this.bossColorModifierPrev = this.bossColorModifier;
+
+ if (BossStatus.hasColorModifier)
+ {
+ this.bossColorModifier += 0.05F;
+
+ if (this.bossColorModifier > 1.0F)
+ {
+ this.bossColorModifier = 1.0F;
+ }
+
+ BossStatus.hasColorModifier = false;
+ }
+ else if (this.bossColorModifier > 0.0F)
+ {
+ this.bossColorModifier -= 0.0125F;
+ }
+ }
+
+ public ShaderGroup getShaderGroup()
+ {
+ return this.theShaderGroup;
+ }
+
+ public void updateShaderGroupSize(int width, int height)
+ {
+ if (OpenGlHelper.shadersSupported)
+ {
+ if (this.theShaderGroup != null)
+ {
+ this.theShaderGroup.createBindFramebuffers(width, height);
+ }
+
+ this.mc.renderGlobal.createBindEntityOutlineFbs(width, height);
+ }
+ }
+
+ /**
+ * Finds what block or object the mouse is over at the specified partial tick time. Args: partialTickTime
+ */
+ public void getMouseOver(float partialTicks)
+ {
+ Entity entity = this.mc.getRenderViewEntity();
+
+ if (entity != null && this.mc.theWorld != null)
+ {
+ this.mc.mcProfiler.startSection("pick");
+ this.mc.pointedEntity = null;
+ double d0 = (double)this.mc.playerController.getBlockReachDistance();
+ this.mc.objectMouseOver = entity.rayTrace(d0, partialTicks);
+ double d1 = d0;
+ Vec3 vec3 = entity.getPositionEyes(partialTicks);
+ boolean flag = false;
+ boolean flag1 = true;
+
+ if (this.mc.playerController.extendedReach())
+ {
+ d0 = 6.0D;
+ d1 = 6.0D;
+ }
+ else
+ {
+ if (d0 > 3.0D)
+ {
+ flag = true;
+ }
+
+ d0 = d0;
+ }
+
+ if (this.mc.objectMouseOver != null)
+ {
+ d1 = this.mc.objectMouseOver.hitVec.distanceTo(vec3);
+ }
+
+ Vec3 vec31 = entity.getLook(partialTicks);
+ Vec3 vec32 = vec3.addVector(vec31.xCoord * d0, vec31.yCoord * d0, vec31.zCoord * d0);
+ this.pointedEntity = null;
+ Vec3 vec33 = null;
+ float f = 1.0F;
+ List list = this.mc.theWorld.getEntitiesInAABBexcluding(entity, entity.getEntityBoundingBox().addCoord(vec31.xCoord * d0, vec31.yCoord * d0, vec31.zCoord * d0).expand((double)f, (double)f, (double)f), Predicates.and(EntitySelectors.NOT_SPECTATING, new EntityRenderer1(this)));
+ double d2 = d1;
+
+ for (int i = 0; i < list.size(); ++i)
+ {
+ Entity entity1 = (Entity)list.get(i);
+ float f1 = entity1.getCollisionBorderSize();
+ AxisAlignedBB axisalignedbb = entity1.getEntityBoundingBox().expand((double)f1, (double)f1, (double)f1);
+ MovingObjectPosition movingobjectposition = axisalignedbb.calculateIntercept(vec3, vec32);
+
+ if (axisalignedbb.isVecInside(vec3))
+ {
+ if (d2 >= 0.0D)
+ {
+ this.pointedEntity = entity1;
+ vec33 = movingobjectposition == null ? vec3 : movingobjectposition.hitVec;
+ d2 = 0.0D;
+ }
+ }
+ else if (movingobjectposition != null)
+ {
+ double d3 = vec3.distanceTo(movingobjectposition.hitVec);
+
+ if (d3 < d2 || d2 == 0.0D)
+ {
+ boolean flag2 = false;
+
+ if (Reflector.ForgeEntity_canRiderInteract.exists())
+ {
+ flag2 = Reflector.callBoolean(entity1, Reflector.ForgeEntity_canRiderInteract, new Object[0]);
+ }
+
+ if (entity1 == entity.ridingEntity && !flag2)
+ {
+ if (d2 == 0.0D)
+ {
+ this.pointedEntity = entity1;
+ vec33 = movingobjectposition.hitVec;
+ }
+ }
+ else
+ {
+ this.pointedEntity = entity1;
+ vec33 = movingobjectposition.hitVec;
+ d2 = d3;
+ }
+ }
+ }
+ }
+
+ if (this.pointedEntity != null && flag && vec3.distanceTo(vec33) > 3.0D)
+ {
+ this.pointedEntity = null;
+ this.mc.objectMouseOver = new MovingObjectPosition(MovingObjectPosition.MovingObjectType.MISS, vec33, (EnumFacing)null, new BlockPos(vec33));
+ }
+
+ if (this.pointedEntity != null && (d2 < d1 || this.mc.objectMouseOver == null))
+ {
+ this.mc.objectMouseOver = new MovingObjectPosition(this.pointedEntity, vec33);
+
+ if (this.pointedEntity instanceof EntityLivingBase || this.pointedEntity instanceof EntityItemFrame)
+ {
+ this.mc.pointedEntity = this.pointedEntity;
+ }
+ }
+
+ this.mc.mcProfiler.endSection();
+ }
+ }
+
+ /**
+ * Update FOV modifier hand
+ */
+ private void updateFovModifierHand()
+ {
+ float f = 1.0F;
+
+ if (this.mc.getRenderViewEntity() instanceof AbstractClientPlayer)
+ {
+ AbstractClientPlayer abstractclientplayer = (AbstractClientPlayer)this.mc.getRenderViewEntity();
+ f = abstractclientplayer.getFovModifier();
+ }
+
+ this.fovModifierHandPrev = this.fovModifierHand;
+ this.fovModifierHand += (f - this.fovModifierHand) * 0.5F;
+
+ if (this.fovModifierHand > 1.5F)
+ {
+ this.fovModifierHand = 1.5F;
+ }
+
+ if (this.fovModifierHand < 0.1F)
+ {
+ this.fovModifierHand = 0.1F;
+ }
+ }
+
+ /**
+ * Changes the field of view of the player depending on if they are underwater or not
+ */
+ private float getFOVModifier(float partialTicks, boolean p_78481_2_)
+ {
+ if (this.debugView)
+ {
+ return 90.0F;
+ }
+ else
+ {
+ Entity entity = this.mc.getRenderViewEntity();
+ float f = 70.0F;
+
+ if (p_78481_2_)
+ {
+ f = this.mc.gameSettings.fovSetting;
+
+ if (Config.isDynamicFov())
+ {
+ f *= this.fovModifierHandPrev + (this.fovModifierHand - this.fovModifierHandPrev) * partialTicks;
+ }
+ }
+
+ boolean flag = false;
+
+ if (this.mc.currentScreen == null)
+ {
+ GameSettings gamesettings = this.mc.gameSettings;
+ flag = GameSettings.isKeyDown(this.mc.gameSettings.ofKeyBindZoom);
+ }
+
+ if (flag)
+ {
+ if (!Config.zoomMode)
+ {
+ Config.zoomMode = true;
+ this.mc.gameSettings.smoothCamera = true;
+ }
+
+ if (Config.zoomMode)
+ {
+ f /= 4.0F;
+ }
+ }
+ else if (Config.zoomMode)
+ {
+ Config.zoomMode = false;
+ this.mc.gameSettings.smoothCamera = false;
+ this.mouseFilterXAxis = new MouseFilter();
+ this.mouseFilterYAxis = new MouseFilter();
+ this.mc.renderGlobal.displayListEntitiesDirty = true;
+ }
+
+ if (entity instanceof EntityLivingBase && ((EntityLivingBase)entity).getHealth() <= 0.0F)
+ {
+ float f1 = (float)((EntityLivingBase)entity).deathTime + partialTicks;
+ f /= (1.0F - 500.0F / (f1 + 500.0F)) * 2.0F + 1.0F;
+ }
+
+ Block block = ActiveRenderInfo.getBlockAtEntityViewpoint(this.mc.theWorld, entity, partialTicks);
+
+ if (block.getMaterial() == Material.water)
+ {
+ f = f * 60.0F / 70.0F;
+ }
+
+ return f;
+ }
+ }
+
+ private void hurtCameraEffect(float partialTicks)
+ {
+ if (this.mc.getRenderViewEntity() instanceof EntityLivingBase)
+ {
+ EntityLivingBase entitylivingbase = (EntityLivingBase)this.mc.getRenderViewEntity();
+ float f = (float)entitylivingbase.hurtTime - partialTicks;
+
+ if (entitylivingbase.getHealth() <= 0.0F)
+ {
+ float f1 = (float)entitylivingbase.deathTime + partialTicks;
+ GlStateManager.rotate(40.0F - 8000.0F / (f1 + 200.0F), 0.0F, 0.0F, 1.0F);
+ }
+
+ if (f < 0.0F)
+ {
+ return;
+ }
+
+ f = f / (float)entitylivingbase.maxHurtTime;
+ f = MathHelper.sin(f * f * f * f * (float)Math.PI);
+ float f2 = entitylivingbase.attackedAtYaw;
+ GlStateManager.rotate(-f2, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(-f * 14.0F, 0.0F, 0.0F, 1.0F);
+ GlStateManager.rotate(f2, 0.0F, 1.0F, 0.0F);
+ }
+ }
+
+ /**
+ * Setups all the GL settings for view bobbing. Args: partialTickTime
+ */
+ private void setupViewBobbing(float partialTicks)
+ {
+ if (this.mc.getRenderViewEntity() instanceof EntityPlayer)
+ {
+ EntityPlayer entityplayer = (EntityPlayer)this.mc.getRenderViewEntity();
+ float f = entityplayer.distanceWalkedModified - entityplayer.prevDistanceWalkedModified;
+ float f1 = -(entityplayer.distanceWalkedModified + f * partialTicks);
+ float f2 = entityplayer.prevCameraYaw + (entityplayer.cameraYaw - entityplayer.prevCameraYaw) * partialTicks;
+ float f3 = entityplayer.prevCameraPitch + (entityplayer.cameraPitch - entityplayer.prevCameraPitch) * partialTicks;
+ GlStateManager.translate(MathHelper.sin(f1 * (float)Math.PI) * f2 * 0.5F, -Math.abs(MathHelper.cos(f1 * (float)Math.PI) * f2), 0.0F);
+ GlStateManager.rotate(MathHelper.sin(f1 * (float)Math.PI) * f2 * 3.0F, 0.0F, 0.0F, 1.0F);
+ GlStateManager.rotate(Math.abs(MathHelper.cos(f1 * (float)Math.PI - 0.2F) * f2) * 5.0F, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(f3, 1.0F, 0.0F, 0.0F);
+ }
+ }
+
+ /**
+ * sets up player's eye (or camera in third person mode)
+ */
+ private void orientCamera(float partialTicks)
+ {
+ Entity entity = this.mc.getRenderViewEntity();
+ float f = entity.getEyeHeight();
+ double d0 = entity.prevPosX + (entity.posX - entity.prevPosX) * (double)partialTicks;
+ double d1 = entity.prevPosY + (entity.posY - entity.prevPosY) * (double)partialTicks + (double)f;
+ double d2 = entity.prevPosZ + (entity.posZ - entity.prevPosZ) * (double)partialTicks;
+
+ if (entity instanceof EntityLivingBase && ((EntityLivingBase)entity).isPlayerSleeping())
+ {
+ f = (float)((double)f + 1.0D);
+ GlStateManager.translate(0.0F, 0.3F, 0.0F);
+
+ if (!this.mc.gameSettings.debugCamEnable)
+ {
+ BlockPos blockpos = new BlockPos(entity);
+ IBlockState iblockstate = this.mc.theWorld.getBlockState(blockpos);
+ Block block = iblockstate.getBlock();
+
+ if (Reflector.ForgeHooksClient_orientBedCamera.exists())
+ {
+ Reflector.callVoid(Reflector.ForgeHooksClient_orientBedCamera, new Object[] {this.mc.theWorld, blockpos, iblockstate, entity});
+ }
+ else if (block == Blocks.bed)
+ {
+ int j = ((EnumFacing)iblockstate.getValue(BlockBed.FACING)).getHorizontalIndex();
+ GlStateManager.rotate((float)(j * 90), 0.0F, 1.0F, 0.0F);
+ }
+
+ GlStateManager.rotate(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * partialTicks + 180.0F, 0.0F, -1.0F, 0.0F);
+ GlStateManager.rotate(entity.prevRotationPitch + (entity.prevRotationPitch - entity.prevRotationPitch) * partialTicks, -1.0F, 0.0F, 0.0F);
+ }
+ }
+ else if (this.mc.gameSettings.thirdPersonView > 0)
+ {
+ double d3 = (double)(this.thirdPersonDistanceTemp + (this.thirdPersonDistance - this.thirdPersonDistanceTemp) * partialTicks);
+
+ if (this.mc.gameSettings.debugCamEnable)
+ {
+ GlStateManager.translate(0.0F, 0.0F, (float)(-d3));
+ }
+ else
+ {
+ float f1 = entity.rotationYaw;
+ float f2 = entity.prevRotationPitch;
+
+ if (this.mc.gameSettings.thirdPersonView == 2)
+ {
+ f2 += 180.0F;
+ }
+
+ double d4 = (double)(-MathHelper.sin(f1 / 180.0F * (float)Math.PI) * MathHelper.cos(f2 / 180.0F * (float)Math.PI)) * d3;
+ double d5 = (double)(MathHelper.cos(f1 / 180.0F * (float)Math.PI) * MathHelper.cos(f2 / 180.0F * (float)Math.PI)) * d3;
+ double d6 = (double)(-MathHelper.sin(f2 / 180.0F * (float)Math.PI)) * d3;
+
+ for (int i = 0; i < 8; ++i)
+ {
+ float f3 = (float)((i & 1) * 2 - 1);
+ float f4 = (float)((i >> 1 & 1) * 2 - 1);
+ float f5 = (float)((i >> 2 & 1) * 2 - 1);
+ f3 = f3 * 0.1F;
+ f4 = f4 * 0.1F;
+ f5 = f5 * 0.1F;
+ MovingObjectPosition movingobjectposition = this.mc.theWorld.rayTraceBlocks(new Vec3(d0 + (double)f3, d1 + (double)f4, d2 + (double)f5), new Vec3(d0 - d4 + (double)f3 + (double)f5, d1 - d6 + (double)f4, d2 - d5 + (double)f5));
+
+ if (movingobjectposition != null)
+ {
+ double d7 = movingobjectposition.hitVec.distanceTo(new Vec3(d0, d1, d2));
+
+ if (d7 < d3)
+ {
+ d3 = d7;
+ }
+ }
+ }
+
+ if (this.mc.gameSettings.thirdPersonView == 2)
+ {
+ GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F);
+ }
+
+ GlStateManager.rotate(entity.prevRotationPitch - f2, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(entity.rotationYaw - f1, 0.0F, 1.0F, 0.0F);
+ GlStateManager.translate(0.0F, 0.0F, (float)(-d3));
+ GlStateManager.rotate(f1 - entity.rotationYaw, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(f2 - entity.prevRotationPitch, 1.0F, 0.0F, 0.0F);
+ }
+ }
+ else
+ {
+ GlStateManager.translate(0.0F, 0.0F, -0.1F);
+ }
+
+ if (Reflector.EntityViewRenderEvent_CameraSetup_Constructor.exists())
+ {
+ if (!this.mc.gameSettings.debugCamEnable)
+ {
+ float f6 = entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * partialTicks + 180.0F;
+ float f7 = entity.prevRotationPitch + (entity.prevRotationPitch - entity.prevRotationPitch) * partialTicks;
+ float f8 = 0.0F;
+
+ if (entity instanceof EntityAnimal)
+ {
+ EntityAnimal entityanimal = (EntityAnimal)entity;
+ f6 = entityanimal.prevRotationYawHead + (entityanimal.rotationYawHead - entityanimal.prevRotationYawHead) * partialTicks + 180.0F;
+ }
+
+ Block block1 = ActiveRenderInfo.getBlockAtEntityViewpoint(this.mc.theWorld, entity, partialTicks);
+ Object object = Reflector.newInstance(Reflector.EntityViewRenderEvent_CameraSetup_Constructor, new Object[] {this, entity, block1, Float.valueOf(partialTicks), Float.valueOf(f6), Float.valueOf(f7), Float.valueOf(f8)});
+ Reflector.postForgeBusEvent(object);
+ f8 = Reflector.getFieldValueFloat(object, Reflector.EntityViewRenderEvent_CameraSetup_roll, f8);
+ f7 = Reflector.getFieldValueFloat(object, Reflector.EntityViewRenderEvent_CameraSetup_pitch, f7);
+ f6 = Reflector.getFieldValueFloat(object, Reflector.EntityViewRenderEvent_CameraSetup_yaw, f6);
+ GlStateManager.rotate(f8, 0.0F, 0.0F, 1.0F);
+ GlStateManager.rotate(f7, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(f6, 0.0F, 1.0F, 0.0F);
+ }
+ }
+ else if (!this.mc.gameSettings.debugCamEnable)
+ {
+ GlStateManager.rotate(entity.prevRotationPitch + (entity.prevRotationPitch - entity.prevRotationPitch) * partialTicks, 1.0F, 0.0F, 0.0F);
+
+ if (entity instanceof EntityAnimal)
+ {
+ EntityAnimal entityanimal1 = (EntityAnimal)entity;
+ GlStateManager.rotate(entityanimal1.prevRotationYawHead + (entityanimal1.rotationYawHead - entityanimal1.prevRotationYawHead) * partialTicks + 180.0F, 0.0F, 1.0F, 0.0F);
+ }
+ else
+ {
+ GlStateManager.rotate(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * partialTicks + 180.0F, 0.0F, 1.0F, 0.0F);
+ }
+ }
+
+ GlStateManager.translate(0.0F, -f, 0.0F);
+ d0 = entity.prevPosX + (entity.posX - entity.prevPosX) * (double)partialTicks;
+ d1 = entity.prevPosY + (entity.posY - entity.prevPosY) * (double)partialTicks + (double)f;
+ d2 = entity.prevPosZ + (entity.posZ - entity.prevPosZ) * (double)partialTicks;
+ this.cloudFog = this.mc.renderGlobal.hasCloudFog(d0, d1, d2, partialTicks);
+ }
+
+ /**
+ * sets up projection, view effects, camera position/rotation
+ */
+ public void setupCameraTransform(float partialTicks, int pass)
+ {
+ this.farPlaneDistance = (float)(this.mc.gameSettings.renderDistanceChunks * 16);
+
+ if (Config.isFogFancy())
+ {
+ this.farPlaneDistance *= 0.95F;
+ }
+
+ if (Config.isFogFast())
+ {
+ this.farPlaneDistance *= 0.83F;
+ }
+
+ GlStateManager.matrixMode(5889);
+ GlStateManager.loadIdentity();
+ float f = 0.07F;
+
+ if (this.mc.gameSettings.anaglyph)
+ {
+ GlStateManager.translate((float)(-(pass * 2 - 1)) * f, 0.0F, 0.0F);
+ }
+
+ this.clipDistance = this.farPlaneDistance * 2.0F;
+
+ if (this.clipDistance < 173.0F)
+ {
+ this.clipDistance = 173.0F;
+ }
+
+ if (this.mc.theWorld.provider.getDimensionId() == 1)
+ {
+ this.clipDistance = 256.0F;
+ }
+
+ if (this.cameraZoom != 1.0D)
+ {
+ GlStateManager.translate((float)this.cameraYaw, (float)(-this.cameraPitch), 0.0F);
+ GlStateManager.scale(this.cameraZoom, this.cameraZoom, 1.0D);
+ }
+
+ Project.gluPerspective(this.getFOVModifier(partialTicks, true), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.clipDistance);
+ GlStateManager.matrixMode(5888);
+ GlStateManager.loadIdentity();
+
+ if (this.mc.gameSettings.anaglyph)
+ {
+ GlStateManager.translate((float)(pass * 2 - 1) * 0.1F, 0.0F, 0.0F);
+ }
+
+ this.hurtCameraEffect(partialTicks);
+
+ if (this.mc.gameSettings.viewBobbing)
+ {
+ this.setupViewBobbing(partialTicks);
+ }
+
+ float f1 = this.mc.thePlayer.prevTimeInPortal + (this.mc.thePlayer.timeInPortal - this.mc.thePlayer.prevTimeInPortal) * partialTicks;
+
+ if (f1 > 0.0F)
+ {
+ byte b0 = 20;
+
+ if (this.mc.thePlayer.isPotionActive(Potion.confusion))
+ {
+ b0 = 7;
+ }
+
+ float f2 = 5.0F / (f1 * f1 + 5.0F) - f1 * 0.04F;
+ f2 = f2 * f2;
+ GlStateManager.rotate(((float)this.rendererUpdateCount + partialTicks) * (float)b0, 0.0F, 1.0F, 1.0F);
+ GlStateManager.scale(1.0F / f2, 1.0F, 1.0F);
+ GlStateManager.rotate(-((float)this.rendererUpdateCount + partialTicks) * (float)b0, 0.0F, 1.0F, 1.0F);
+ }
+
+ this.orientCamera(partialTicks);
+
+ if (this.debugView)
+ {
+ switch (this.debugViewDirection)
+ {
+ case 0:
+ GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F);
+ break;
+
+ case 1:
+ GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F);
+ break;
+
+ case 2:
+ GlStateManager.rotate(-90.0F, 0.0F, 1.0F, 0.0F);
+ break;
+
+ case 3:
+ GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F);
+ break;
+
+ case 4:
+ GlStateManager.rotate(-90.0F, 1.0F, 0.0F, 0.0F);
+ }
+ }
+ }
+
+ /**
+ * Render player hand
+ */
+ private void renderHand(float partialTicks, int xOffset)
+ {
+ this.renderHand(partialTicks, xOffset, true, true, false);
+ }
+
+ public void renderHand(float p_renderHand_1_, int p_renderHand_2_, boolean p_renderHand_3_, boolean p_renderHand_4_, boolean p_renderHand_5_)
+ {
+ if (!this.debugView)
+ {
+ GlStateManager.matrixMode(5889);
+ GlStateManager.loadIdentity();
+ float f = 0.07F;
+
+ if (this.mc.gameSettings.anaglyph)
+ {
+ GlStateManager.translate((float)(-(p_renderHand_2_ * 2 - 1)) * f, 0.0F, 0.0F);
+ }
+
+ if (Config.isShaders())
+ {
+ Shaders.applyHandDepth();
+ }
+
+ Project.gluPerspective(this.getFOVModifier(p_renderHand_1_, false), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.farPlaneDistance * 2.0F);
+ GlStateManager.matrixMode(5888);
+ GlStateManager.loadIdentity();
+
+ if (this.mc.gameSettings.anaglyph)
+ {
+ GlStateManager.translate((float)(p_renderHand_2_ * 2 - 1) * 0.1F, 0.0F, 0.0F);
+ }
+
+ boolean flag = false;
+
+ if (p_renderHand_3_)
+ {
+ GlStateManager.pushMatrix();
+ this.hurtCameraEffect(p_renderHand_1_);
+
+ if (this.mc.gameSettings.viewBobbing)
+ {
+ this.setupViewBobbing(p_renderHand_1_);
+ }
+
+ flag = this.mc.getRenderViewEntity() instanceof EntityLivingBase && ((EntityLivingBase)this.mc.getRenderViewEntity()).isPlayerSleeping();
+ boolean flag1 = !ReflectorForge.renderFirstPersonHand(this.mc.renderGlobal, p_renderHand_1_, p_renderHand_2_);
+
+ if (flag1 && this.mc.gameSettings.thirdPersonView == 0 && !flag && !this.mc.gameSettings.hideGUI && !this.mc.playerController.isSpectator())
+ {
+ this.enableLightmap();
+
+ if (Config.isShaders())
+ {
+ ShadersRender.renderItemFP(this.itemRenderer, p_renderHand_1_, p_renderHand_5_);
+ }
+ else
+ {
+ this.itemRenderer.renderItemInFirstPerson(p_renderHand_1_);
+ }
+
+ this.disableLightmap();
+ }
+
+ GlStateManager.popMatrix();
+ }
+
+ if (!p_renderHand_4_)
+ {
+ return;
+ }
+
+ this.disableLightmap();
+
+ if (this.mc.gameSettings.thirdPersonView == 0 && !flag)
+ {
+ this.itemRenderer.renderOverlays(p_renderHand_1_);
+ this.hurtCameraEffect(p_renderHand_1_);
+ }
+
+ if (this.mc.gameSettings.viewBobbing)
+ {
+ this.setupViewBobbing(p_renderHand_1_);
+ }
+ }
+ }
+
+ public void disableLightmap()
+ {
+ GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit);
+ GlStateManager.disableTexture2D();
+ GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
+
+ if (Config.isShaders())
+ {
+ Shaders.disableLightmap();
+ }
+ }
+
+ public void enableLightmap()
+ {
+ GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit);
+ GlStateManager.matrixMode(5890);
+ GlStateManager.loadIdentity();
+ float f = 0.00390625F;
+ GlStateManager.scale(f, f, f);
+ GlStateManager.translate(8.0F, 8.0F, 8.0F);
+ GlStateManager.matrixMode(5888);
+ this.mc.getTextureManager().bindTexture(this.locationLightMap);
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_CLAMP);
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_CLAMP);
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ GlStateManager.enableTexture2D();
+ GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
+
+ if (Config.isShaders())
+ {
+ Shaders.enableLightmap();
+ }
+ }
+
+ /**
+ * Recompute a random value that is applied to block color in updateLightmap()
+ */
+ private void updateTorchFlicker()
+ {
+ this.torchFlickerDX = (float)((double)this.torchFlickerDX + (Math.random() - Math.random()) * Math.random() * Math.random());
+ this.torchFlickerDX = (float)((double)this.torchFlickerDX * 0.9D);
+ this.torchFlickerX += (this.torchFlickerDX - this.torchFlickerX) * 1.0F;
+ this.lightmapUpdateNeeded = true;
+ }
+
+ private void updateLightmap(float partialTicks)
+ {
+ if (this.lightmapUpdateNeeded)
+ {
+ this.mc.mcProfiler.startSection("lightTex");
+ WorldClient worldclient = this.mc.theWorld;
+
+ if (worldclient != null)
+ {
+ if (Config.isCustomColors() && CustomColors.updateLightmap(worldclient, this.torchFlickerX, this.lightmapColors, this.mc.thePlayer.isPotionActive(Potion.nightVision)))
+ {
+ this.lightmapTexture.updateDynamicTexture();
+ this.lightmapUpdateNeeded = false;
+ this.mc.mcProfiler.endSection();
+ return;
+ }
+
+ float f = worldclient.getSunBrightness(1.0F);
+ float f1 = f * 0.95F + 0.05F;
+
+ for (int i = 0; i < 256; ++i)
+ {
+ float f2 = worldclient.provider.getLightBrightnessTable()[i / 16] * f1;
+ float f3 = worldclient.provider.getLightBrightnessTable()[i % 16] * (this.torchFlickerX * 0.1F + 1.5F);
+
+ if (worldclient.getLastLightningBolt() > 0)
+ {
+ f2 = worldclient.provider.getLightBrightnessTable()[i / 16];
+ }
+
+ float f4 = f2 * (f * 0.65F + 0.35F);
+ float f5 = f2 * (f * 0.65F + 0.35F);
+ float f6 = f3 * ((f3 * 0.6F + 0.4F) * 0.6F + 0.4F);
+ float f7 = f3 * (f3 * f3 * 0.6F + 0.4F);
+ float f8 = f4 + f3;
+ float f9 = f5 + f6;
+ float f10 = f2 + f7;
+ f8 = f8 * 0.96F + 0.03F;
+ f9 = f9 * 0.96F + 0.03F;
+ f10 = f10 * 0.96F + 0.03F;
+
+ if (this.bossColorModifier > 0.0F)
+ {
+ float f11 = this.bossColorModifierPrev + (this.bossColorModifier - this.bossColorModifierPrev) * partialTicks;
+ f8 = f8 * (1.0F - f11) + f8 * 0.7F * f11;
+ f9 = f9 * (1.0F - f11) + f9 * 0.6F * f11;
+ f10 = f10 * (1.0F - f11) + f10 * 0.6F * f11;
+ }
+
+ if (worldclient.provider.getDimensionId() == 1)
+ {
+ f8 = 0.22F + f3 * 0.75F;
+ f9 = 0.28F + f6 * 0.75F;
+ f10 = 0.25F + f7 * 0.75F;
+ }
+
+ if (this.mc.thePlayer.isPotionActive(Potion.nightVision))
+ {
+ float f15 = this.getNightVisionBrightness(this.mc.thePlayer, partialTicks);
+ float f12 = 1.0F / f8;
+
+ if (f12 > 1.0F / f9)
+ {
+ f12 = 1.0F / f9;
+ }
+
+ if (f12 > 1.0F / f10)
+ {
+ f12 = 1.0F / f10;
+ }
+
+ f8 = f8 * (1.0F - f15) + f8 * f12 * f15;
+ f9 = f9 * (1.0F - f15) + f9 * f12 * f15;
+ f10 = f10 * (1.0F - f15) + f10 * f12 * f15;
+ }
+
+ if (f8 > 1.0F)
+ {
+ f8 = 1.0F;
+ }
+
+ if (f9 > 1.0F)
+ {
+ f9 = 1.0F;
+ }
+
+ if (f10 > 1.0F)
+ {
+ f10 = 1.0F;
+ }
+
+ float f16 = this.mc.gameSettings.gammaSetting;
+ float f17 = 1.0F - f8;
+ float f13 = 1.0F - f9;
+ float f14 = 1.0F - f10;
+ f17 = 1.0F - f17 * f17 * f17 * f17;
+ f13 = 1.0F - f13 * f13 * f13 * f13;
+ f14 = 1.0F - f14 * f14 * f14 * f14;
+ f8 = f8 * (1.0F - f16) + f17 * f16;
+ f9 = f9 * (1.0F - f16) + f13 * f16;
+ f10 = f10 * (1.0F - f16) + f14 * f16;
+ f8 = f8 * 0.96F + 0.03F;
+ f9 = f9 * 0.96F + 0.03F;
+ f10 = f10 * 0.96F + 0.03F;
+
+ if (f8 > 1.0F)
+ {
+ f8 = 1.0F;
+ }
+
+ if (f9 > 1.0F)
+ {
+ f9 = 1.0F;
+ }
+
+ if (f10 > 1.0F)
+ {
+ f10 = 1.0F;
+ }
+
+ if (f8 < 0.0F)
+ {
+ f8 = 0.0F;
+ }
+
+ if (f9 < 0.0F)
+ {
+ f9 = 0.0F;
+ }
+
+ if (f10 < 0.0F)
+ {
+ f10 = 0.0F;
+ }
+
+ short short1 = 255;
+ int j = (int)(f8 * 255.0F);
+ int k = (int)(f9 * 255.0F);
+ int l = (int)(f10 * 255.0F);
+ this.lightmapColors[i] = short1 << 24 | j << 16 | k << 8 | l;
+ }
+
+ this.lightmapTexture.updateDynamicTexture();
+ this.lightmapUpdateNeeded = false;
+ this.mc.mcProfiler.endSection();
+ }
+ }
+ }
+
+ public float getNightVisionBrightness(EntityLivingBase entitylivingbaseIn, float partialTicks)
+ {
+ int i = entitylivingbaseIn.getActivePotionEffect(Potion.nightVision).getDuration();
+ return i > 200 ? 1.0F : 0.7F + MathHelper.sin(((float)i - partialTicks) * (float)Math.PI * 0.2F) * 0.3F;
+ }
+
+ public void func_181560_a(float p_181560_1_, long p_181560_2_)
+ {
+ this.frameInit();
+ boolean flag = Display.isActive();
+
+ if (!flag && this.mc.gameSettings.pauseOnLostFocus && (!this.mc.gameSettings.touchscreen || !Mouse.isButtonDown(1)))
+ {
+ if (Minecraft.getSystemTime() - this.prevFrameTime > 500L)
+ {
+ this.mc.displayInGameMenu();
+ }
+ }
+ else
+ {
+ this.prevFrameTime = Minecraft.getSystemTime();
+ }
+
+ this.mc.mcProfiler.startSection("mouse");
+
+ if (flag && Minecraft.isRunningOnMac && this.mc.inGameHasFocus && !Mouse.isInsideWindow())
+ {
+ Mouse.setGrabbed(false);
+ Mouse.setCursorPosition(Display.getWidth() / 2, Display.getHeight() / 2);
+ Mouse.setGrabbed(true);
+ }
+
+ if (this.mc.inGameHasFocus && flag)
+ {
+ this.mc.mouseHelper.mouseXYChange();
+ float f = this.mc.gameSettings.mouseSensitivity * 0.6F + 0.2F;
+ float f1 = f * f * f * 8.0F;
+ float f2 = (float)this.mc.mouseHelper.deltaX * f1;
+ float f3 = (float)this.mc.mouseHelper.deltaY * f1;
+ byte b0 = 1;
+
+ if (this.mc.gameSettings.invertMouse)
+ {
+ b0 = -1;
+ }
+
+ if (this.mc.gameSettings.smoothCamera)
+ {
+ this.smoothCamYaw += f2;
+ this.smoothCamPitch += f3;
+ float f4 = p_181560_1_ - this.smoothCamPartialTicks;
+ this.smoothCamPartialTicks = p_181560_1_;
+ f2 = this.smoothCamFilterX * f4;
+ f3 = this.smoothCamFilterY * f4;
+ this.mc.thePlayer.setAngles(f2, f3 * (float)b0);
+ }
+ else
+ {
+ this.smoothCamYaw = 0.0F;
+ this.smoothCamPitch = 0.0F;
+ this.mc.thePlayer.setAngles(f2, f3 * (float)b0);
+ }
+ }
+
+ this.mc.mcProfiler.endSection();
+
+ if (!this.mc.skipRenderWorld)
+ {
+ anaglyphEnable = this.mc.gameSettings.anaglyph;
+ final ScaledResolution scaledresolution = new ScaledResolution(this.mc);
+ int l = scaledresolution.getScaledWidth();
+ int i1 = scaledresolution.getScaledHeight();
+ final int j1 = Mouse.getX() * l / this.mc.displayWidth;
+ final int k1 = i1 - Mouse.getY() * i1 / this.mc.displayHeight - 1;
+ int l1 = this.mc.gameSettings.limitFramerate;
+
+ if (this.mc.theWorld != null)
+ {
+ this.mc.mcProfiler.startSection("level");
+ int i = Math.min(Minecraft.getDebugFPS(), l1);
+ i = Math.max(i, 60);
+ long j = System.nanoTime() - p_181560_2_;
+ long k = Math.max((long)(1000000000 / i / 4) - j, 0L);
+ this.renderWorld(p_181560_1_, System.nanoTime() + k);
+
+ if (OpenGlHelper.shadersSupported)
+ {
+ this.mc.renderGlobal.renderEntityOutlineFramebuffer();
+
+ if (this.theShaderGroup != null && this.useShader)
+ {
+ GlStateManager.matrixMode(5890);
+ GlStateManager.pushMatrix();
+ GlStateManager.loadIdentity();
+ this.theShaderGroup.loadShaderGroup(p_181560_1_);
+ GlStateManager.popMatrix();
+ }
+
+ this.mc.getFramebuffer().bindFramebuffer(true);
+ }
+
+ this.renderEndNanoTime = System.nanoTime();
+ this.mc.mcProfiler.endStartSection("gui");
+
+ if (!this.mc.gameSettings.hideGUI || this.mc.currentScreen != null)
+ {
+ GlStateManager.alphaFunc(516, 0.1F);
+ this.mc.ingameGUI.renderGameOverlay(p_181560_1_);
+
+ if (this.mc.gameSettings.ofShowFps && !this.mc.gameSettings.showDebugInfo)
+ {
+ Config.drawFps();
+ }
+
+ if (this.mc.gameSettings.showDebugInfo)
+ {
+ Lagometer.showLagometer(scaledresolution);
+ }
+ }
+
+ this.mc.mcProfiler.endSection();
+ }
+ else
+ {
+ GlStateManager.viewport(0, 0, this.mc.displayWidth, this.mc.displayHeight);
+ GlStateManager.matrixMode(5889);
+ GlStateManager.loadIdentity();
+ GlStateManager.matrixMode(5888);
+ GlStateManager.loadIdentity();
+ this.setupOverlayRendering();
+ this.renderEndNanoTime = System.nanoTime();
+ TileEntityRendererDispatcher.instance.renderEngine = this.mc.getTextureManager();
+ }
+
+ if (this.mc.currentScreen != null)
+ {
+ GlStateManager.clear(256);
+
+ try
+ {
+ if (Reflector.ForgeHooksClient_drawScreen.exists())
+ {
+ Reflector.callVoid(Reflector.ForgeHooksClient_drawScreen, new Object[] {this.mc.currentScreen, Integer.valueOf(j1), Integer.valueOf(k1), Float.valueOf(p_181560_1_)});
+ }
+ else
+ {
+ this.mc.currentScreen.drawScreen(j1, k1, p_181560_1_);
+ }
+ }
+ catch (Throwable throwable)
+ {
+ CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Rendering screen");
+ CrashReportCategory crashreportcategory = crashreport.makeCategory("Screen render details");
+ crashreportcategory.addCrashSectionCallable("Screen name", new EntityRenderer2(this));
+ crashreportcategory.addCrashSectionCallable("Mouse location", new Callable()
+ {
+ private static final String __OBFID = "CL_00000950";
+ public String call() throws Exception
+ {
+ return String.format("Scaled: (%d, %d). Absolute: (%d, %d)", new Object[] {Integer.valueOf(j1), Integer.valueOf(k1), Integer.valueOf(Mouse.getX()), Integer.valueOf(Mouse.getY())});
+ }
+ });
+ crashreportcategory.addCrashSectionCallable("Screen size", new Callable()
+ {
+ private static final String __OBFID = "CL_00000951";
+ public String call() throws Exception
+ {
+ return String.format("Scaled: (%d, %d). Absolute: (%d, %d). Scale factor of %d", new Object[] {Integer.valueOf(scaledresolution.getScaledWidth()), Integer.valueOf(scaledresolution.getScaledHeight()), Integer.valueOf(EntityRenderer.this.mc.displayWidth), Integer.valueOf(EntityRenderer.this.mc.displayHeight), Integer.valueOf(scaledresolution.getScaleFactor())});
+ }
+ });
+ throw new ReportedException(crashreport);
+ }
+ }
+ }
+
+ this.frameFinish();
+ this.waitForServerThread();
+ Lagometer.updateLagometer();
+
+ if (this.mc.gameSettings.ofProfiler)
+ {
+ this.mc.gameSettings.showDebugProfilerChart = true;
+ }
+ }
+
+ public void renderStreamIndicator(float partialTicks)
+ {
+ this.setupOverlayRendering();
+ this.mc.ingameGUI.renderStreamIndicator(new ScaledResolution(this.mc));
+ }
+
+ private boolean isDrawBlockOutline()
+ {
+ if (!this.drawBlockOutline)
+ {
+ return false;
+ }
+ else
+ {
+ Entity entity = this.mc.getRenderViewEntity();
+ boolean flag = entity instanceof EntityPlayer && !this.mc.gameSettings.hideGUI;
+
+ if (flag && !((EntityPlayer)entity).capabilities.allowEdit)
+ {
+ ItemStack itemstack = ((EntityPlayer)entity).getCurrentEquippedItem();
+
+ if (this.mc.objectMouseOver != null && this.mc.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK)
+ {
+ BlockPos blockpos = this.mc.objectMouseOver.getBlockPos();
+ IBlockState iblockstate = this.mc.theWorld.getBlockState(blockpos);
+ Block block = iblockstate.getBlock();
+
+ if (this.mc.playerController.getCurrentGameType() == WorldSettings.GameType.SPECTATOR)
+ {
+ flag = ReflectorForge.blockHasTileEntity(iblockstate) && this.mc.theWorld.getTileEntity(blockpos) instanceof IInventory;
+ }
+ else
+ {
+ flag = itemstack != null && (itemstack.canDestroy(block) || itemstack.canPlaceOn(block));
+ }
+ }
+ }
+
+ return flag;
+ }
+ }
+
+ private void renderWorldDirections(float partialTicks)
+ {
+ if (this.mc.gameSettings.showDebugInfo && !this.mc.gameSettings.hideGUI && !this.mc.thePlayer.hasReducedDebug() && !this.mc.gameSettings.reducedDebugInfo)
+ {
+ Entity entity = this.mc.getRenderViewEntity();
+ GlStateManager.enableBlend();
+ GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
+ GL11.glLineWidth(1.0F);
+ GlStateManager.disableTexture2D();
+ GlStateManager.depthMask(false);
+ GlStateManager.pushMatrix();
+ GlStateManager.matrixMode(5888);
+ GlStateManager.loadIdentity();
+ this.orientCamera(partialTicks);
+ GlStateManager.translate(0.0F, entity.getEyeHeight(), 0.0F);
+ RenderGlobal.func_181563_a(new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.005D, 1.0E-4D, 1.0E-4D), 255, 0, 0, 255);
+ RenderGlobal.func_181563_a(new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0E-4D, 1.0E-4D, 0.005D), 0, 0, 255, 255);
+ RenderGlobal.func_181563_a(new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0E-4D, 0.0033D, 1.0E-4D), 0, 255, 0, 255);
+ GlStateManager.popMatrix();
+ GlStateManager.depthMask(true);
+ GlStateManager.enableTexture2D();
+ GlStateManager.disableBlend();
+ }
+ }
+
+ public void renderWorld(float partialTicks, long finishTimeNano)
+ {
+ this.updateLightmap(partialTicks);
+
+ if (this.mc.getRenderViewEntity() == null)
+ {
+ this.mc.setRenderViewEntity(this.mc.thePlayer);
+ }
+
+ this.getMouseOver(partialTicks);
+
+ if (Config.isShaders())
+ {
+ Shaders.beginRender(this.mc, partialTicks, finishTimeNano);
+ }
+
+ GlStateManager.enableDepth();
+ GlStateManager.enableAlpha();
+ GlStateManager.alphaFunc(516, 0.1F);
+ this.mc.mcProfiler.startSection("center");
+
+ if (this.mc.gameSettings.anaglyph)
+ {
+ anaglyphField = 0;
+ GlStateManager.colorMask(false, true, true, false);
+ this.renderWorldPass(0, partialTicks, finishTimeNano);
+ anaglyphField = 1;
+ GlStateManager.colorMask(true, false, false, false);
+ this.renderWorldPass(1, partialTicks, finishTimeNano);
+ GlStateManager.colorMask(true, true, true, false);
+ }
+ else
+ {
+ this.renderWorldPass(2, partialTicks, finishTimeNano);
+ }
+
+ this.mc.mcProfiler.endSection();
+ }
+
+ private void renderWorldPass(int pass, float partialTicks, long finishTimeNano)
+ {
+ boolean flag = Config.isShaders();
+
+ if (flag)
+ {
+ Shaders.beginRenderPass(pass, partialTicks, finishTimeNano);
+ }
+
+ RenderGlobal renderglobal = this.mc.renderGlobal;
+ EffectRenderer effectrenderer = this.mc.effectRenderer;
+ boolean flag1 = this.isDrawBlockOutline();
+ GlStateManager.enableCull();
+ this.mc.mcProfiler.endStartSection("clear");
+
+ if (flag)
+ {
+ Shaders.setViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight);
+ }
+ else
+ {
+ GlStateManager.viewport(0, 0, this.mc.displayWidth, this.mc.displayHeight);
+ }
+
+ this.updateFogColor(partialTicks);
+ GlStateManager.clear(16640);
+
+ if (flag)
+ {
+ Shaders.clearRenderBuffer();
+ }
+
+ this.mc.mcProfiler.endStartSection("camera");
+ this.setupCameraTransform(partialTicks, pass);
+
+ if (flag)
+ {
+ Shaders.setCamera(partialTicks);
+ }
+
+ ActiveRenderInfo.updateRenderInfo(this.mc.thePlayer, this.mc.gameSettings.thirdPersonView == 2);
+ this.mc.mcProfiler.endStartSection("frustum");
+ ClippingHelperImpl.getInstance();
+ this.mc.mcProfiler.endStartSection("culling");
+ Frustum frustum = new Frustum();
+ Entity entity = this.mc.getRenderViewEntity();
+ double d0 = entity.lastTickPosX + (entity.posX - entity.lastTickPosX) * (double)partialTicks;
+ double d1 = entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * (double)partialTicks;
+ double d2 = entity.lastTickPosZ + (entity.posZ - entity.lastTickPosZ) * (double)partialTicks;
+
+ if (flag)
+ {
+ ShadersRender.setFrustrumPosition(frustum, d0, d1, d2);
+ }
+ else
+ {
+ frustum.setPosition(d0, d1, d2);
+ }
+
+ if ((Config.isSkyEnabled() || Config.isSunMoonEnabled() || Config.isStarsEnabled()) && !Shaders.isShadowPass)
+ {
+ this.setupFog(-1, partialTicks);
+ this.mc.mcProfiler.endStartSection("sky");
+ GlStateManager.matrixMode(5889);
+ GlStateManager.loadIdentity();
+ Project.gluPerspective(this.getFOVModifier(partialTicks, true), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.clipDistance);
+ GlStateManager.matrixMode(5888);
+
+ if (flag)
+ {
+ Shaders.beginSky();
+ }
+
+ renderglobal.renderSky(partialTicks, pass);
+
+ if (flag)
+ {
+ Shaders.endSky();
+ }
+
+ GlStateManager.matrixMode(5889);
+ GlStateManager.loadIdentity();
+ Project.gluPerspective(this.getFOVModifier(partialTicks, true), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.clipDistance);
+ GlStateManager.matrixMode(5888);
+ }
+ else
+ {
+ GlStateManager.disableBlend();
+ }
+
+ this.setupFog(0, partialTicks);
+ GlStateManager.shadeModel(7425);
+
+ if (entity.posY + (double)entity.getEyeHeight() < 128.0D + (double)(this.mc.gameSettings.ofCloudsHeight * 128.0F))
+ {
+ this.renderCloudsCheck(renderglobal, partialTicks, pass);
+ }
+
+ this.mc.mcProfiler.endStartSection("prepareterrain");
+ this.setupFog(0, partialTicks);
+ this.mc.getTextureManager().bindTexture(TextureMap.locationBlocksTexture);
+ RenderHelper.disableStandardItemLighting();
+ this.mc.mcProfiler.endStartSection("terrain_setup");
+
+ if (flag)
+ {
+ ShadersRender.setupTerrain(renderglobal, entity, (double)partialTicks, frustum, this.frameCount++, this.mc.thePlayer.isSpectator());
+ }
+ else
+ {
+ renderglobal.setupTerrain(entity, (double)partialTicks, frustum, this.frameCount++, this.mc.thePlayer.isSpectator());
+ }
+
+ if (pass == 0 || pass == 2)
+ {
+ this.mc.mcProfiler.endStartSection("updatechunks");
+ Lagometer.timerChunkUpload.start();
+ this.mc.renderGlobal.updateChunks(finishTimeNano);
+ Lagometer.timerChunkUpload.end();
+ }
+
+ this.mc.mcProfiler.endStartSection("terrain");
+ Lagometer.timerTerrain.start();
+
+ if (this.mc.gameSettings.ofSmoothFps && pass > 0)
+ {
+ this.mc.mcProfiler.endStartSection("finish");
+ GL11.glFinish();
+ this.mc.mcProfiler.endStartSection("terrain");
+ }
+
+ GlStateManager.matrixMode(5888);
+ GlStateManager.pushMatrix();
+ GlStateManager.disableAlpha();
+
+ if (flag)
+ {
+ ShadersRender.beginTerrainSolid();
+ }
+
+ renderglobal.renderBlockLayer(EnumWorldBlockLayer.SOLID, (double)partialTicks, pass, entity);
+ GlStateManager.enableAlpha();
+
+ if (flag)
+ {
+ ShadersRender.beginTerrainCutoutMipped();
+ }
+
+ renderglobal.renderBlockLayer(EnumWorldBlockLayer.CUTOUT_MIPPED, (double)partialTicks, pass, entity);
+ this.mc.getTextureManager().getTexture(TextureMap.locationBlocksTexture).setBlurMipmap(false, false);
+
+ if (flag)
+ {
+ ShadersRender.beginTerrainCutout();
+ }
+
+ renderglobal.renderBlockLayer(EnumWorldBlockLayer.CUTOUT, (double)partialTicks, pass, entity);
+ this.mc.getTextureManager().getTexture(TextureMap.locationBlocksTexture).restoreLastBlurMipmap();
+
+ if (flag)
+ {
+ ShadersRender.endTerrain();
+ }
+
+ Lagometer.timerTerrain.end();
+ GlStateManager.shadeModel(7424);
+ GlStateManager.alphaFunc(516, 0.1F);
+
+ if (!this.debugView)
+ {
+ GlStateManager.matrixMode(5888);
+ GlStateManager.popMatrix();
+ GlStateManager.pushMatrix();
+ RenderHelper.enableStandardItemLighting();
+ this.mc.mcProfiler.endStartSection("entities");
+
+ if (Reflector.ForgeHooksClient_setRenderPass.exists())
+ {
+ Reflector.callVoid(Reflector.ForgeHooksClient_setRenderPass, new Object[] {Integer.valueOf(0)});
+ }
+
+ renderglobal.renderEntities(entity, frustum, partialTicks);
+
+ if (Reflector.ForgeHooksClient_setRenderPass.exists())
+ {
+ Reflector.callVoid(Reflector.ForgeHooksClient_setRenderPass, new Object[] {Integer.valueOf(-1)});
+ }
+
+ RenderHelper.disableStandardItemLighting();
+ this.disableLightmap();
+ GlStateManager.matrixMode(5888);
+ GlStateManager.popMatrix();
+ GlStateManager.pushMatrix();
+
+ if (this.mc.objectMouseOver != null && entity.isInsideOfMaterial(Material.water) && flag1)
+ {
+ EntityPlayer entityplayer = (EntityPlayer)entity;
+ GlStateManager.disableAlpha();
+ this.mc.mcProfiler.endStartSection("outline");
+
+ if ((!Reflector.ForgeHooksClient_onDrawBlockHighlight.exists() || !Reflector.callBoolean(Reflector.ForgeHooksClient_onDrawBlockHighlight, new Object[] {renderglobal, entityplayer, this.mc.objectMouseOver, Integer.valueOf(0), entityplayer.getHeldItem(), Float.valueOf(partialTicks)})) && !this.mc.gameSettings.hideGUI)
+ {
+ renderglobal.drawSelectionBox(entityplayer, this.mc.objectMouseOver, 0, partialTicks);
+ }
+ GlStateManager.enableAlpha();
+ }
+ }
+
+ GlStateManager.matrixMode(5888);
+ GlStateManager.popMatrix();
+
+ if (flag1 && this.mc.objectMouseOver != null && !entity.isInsideOfMaterial(Material.water))
+ {
+ EntityPlayer entityplayer1 = (EntityPlayer)entity;
+ GlStateManager.disableAlpha();
+ this.mc.mcProfiler.endStartSection("outline");
+
+ if ((!Reflector.ForgeHooksClient_onDrawBlockHighlight.exists() || !Reflector.callBoolean(Reflector.ForgeHooksClient_onDrawBlockHighlight, new Object[] {renderglobal, entityplayer1, this.mc.objectMouseOver, Integer.valueOf(0), entityplayer1.getHeldItem(), Float.valueOf(partialTicks)})) && !this.mc.gameSettings.hideGUI)
+ {
+ renderglobal.drawSelectionBox(entityplayer1, this.mc.objectMouseOver, 0, partialTicks);
+ }
+ GlStateManager.enableAlpha();
+ }
+
+ if (!renderglobal.damagedBlocks.isEmpty())
+ {
+ this.mc.mcProfiler.endStartSection("destroyProgress");
+ GlStateManager.enableBlend();
+ GlStateManager.tryBlendFuncSeparate(770, 1, 1, 0);
+ this.mc.getTextureManager().getTexture(TextureMap.locationBlocksTexture).setBlurMipmap(false, false);
+ renderglobal.drawBlockDamageTexture(Tessellator.getInstance(), Tessellator.getInstance().getWorldRenderer(), entity, partialTicks);
+ this.mc.getTextureManager().getTexture(TextureMap.locationBlocksTexture).restoreLastBlurMipmap();
+ GlStateManager.disableBlend();
+ }
+
+ GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
+ GlStateManager.disableBlend();
+
+ if (!this.debugView)
+ {
+ this.enableLightmap();
+ this.mc.mcProfiler.endStartSection("litParticles");
+
+ if (flag)
+ {
+ Shaders.beginLitParticles();
+ }
+
+ effectrenderer.renderLitParticles(entity, partialTicks);
+ RenderHelper.disableStandardItemLighting();
+ this.setupFog(0, partialTicks);
+ this.mc.mcProfiler.endStartSection("particles");
+
+ if (flag)
+ {
+ Shaders.beginParticles();
+ }
+
+ effectrenderer.renderParticles(entity, partialTicks);
+
+ if (flag)
+ {
+ Shaders.endParticles();
+ }
+
+ this.disableLightmap();
+ }
+
+ GlStateManager.depthMask(false);
+ GlStateManager.enableCull();
+ this.mc.mcProfiler.endStartSection("weather");
+
+ if (flag)
+ {
+ Shaders.beginWeather();
+ }
+
+ this.renderRainSnow(partialTicks);
+
+ if (flag)
+ {
+ Shaders.endWeather();
+ }
+
+ GlStateManager.depthMask(true);
+ renderglobal.renderWorldBorder(entity, partialTicks);
+
+ if (flag)
+ {
+ ShadersRender.renderHand0(this, partialTicks, pass);
+ Shaders.preWater();
+ }
+
+ GlStateManager.disableBlend();
+ GlStateManager.enableCull();
+ GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
+ GlStateManager.alphaFunc(516, 0.1F);
+ this.setupFog(0, partialTicks);
+ GlStateManager.enableBlend();
+ GlStateManager.depthMask(false);
+ this.mc.getTextureManager().bindTexture(TextureMap.locationBlocksTexture);
+ GlStateManager.shadeModel(7425);
+ this.mc.mcProfiler.endStartSection("translucent");
+
+ if (flag)
+ {
+ Shaders.beginWater();
+ }
+
+ renderglobal.renderBlockLayer(EnumWorldBlockLayer.TRANSLUCENT, (double)partialTicks, pass, entity);
+
+ if (flag)
+ {
+ Shaders.endWater();
+ }
+
+ if (Reflector.ForgeHooksClient_setRenderPass.exists() && !this.debugView)
+ {
+ RenderHelper.enableStandardItemLighting();
+ this.mc.mcProfiler.endStartSection("entities");
+ Reflector.callVoid(Reflector.ForgeHooksClient_setRenderPass, new Object[] {Integer.valueOf(1)});
+ this.mc.renderGlobal.renderEntities(entity, frustum, partialTicks);
+ GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
+ Reflector.callVoid(Reflector.ForgeHooksClient_setRenderPass, new Object[] {Integer.valueOf(-1)});
+ RenderHelper.disableStandardItemLighting();
+ }
+
+ GlStateManager.shadeModel(7424);
+ GlStateManager.depthMask(true);
+ GlStateManager.enableCull();
+ GlStateManager.disableBlend();
+ GlStateManager.disableFog();
+
+ if (entity.posY + (double)entity.getEyeHeight() >= 128.0D + (double)(this.mc.gameSettings.ofCloudsHeight * 128.0F))
+ {
+ this.mc.mcProfiler.endStartSection("aboveClouds");
+ this.renderCloudsCheck(renderglobal, partialTicks, pass);
+ }
+
+ if (Reflector.ForgeHooksClient_dispatchRenderLast.exists())
+ {
+ this.mc.mcProfiler.endStartSection("forge_render_last");
+ Reflector.callVoid(Reflector.ForgeHooksClient_dispatchRenderLast, new Object[] {renderglobal, Float.valueOf(partialTicks)});
+ }
+
+ this.mc.mcProfiler.endStartSection("hand");
+ boolean flag2 = ReflectorForge.renderFirstPersonHand(this.mc.renderGlobal, partialTicks, pass);
+
+ if (!flag2 && this.renderHand && !Shaders.isShadowPass)
+ {
+ if (flag)
+ {
+ ShadersRender.renderHand1(this, partialTicks, pass);
+ Shaders.renderCompositeFinal();
+ }
+
+ GlStateManager.clear(256);
+
+ if (flag)
+ {
+ ShadersRender.renderFPOverlay(this, partialTicks, pass);
+ }
+ else
+ {
+ this.renderHand(partialTicks, pass);
+ }
+
+ this.renderWorldDirections(partialTicks);
+ }
+
+ if (flag)
+ {
+ Shaders.endRender();
+ }
+ }
+
+ private void renderCloudsCheck(RenderGlobal renderGlobalIn, float partialTicks, int pass)
+ {
+ if (this.mc.gameSettings.renderDistanceChunks >= 4 && !Config.isCloudsOff() && Shaders.shouldRenderClouds(this.mc.gameSettings))
+ {
+ this.mc.mcProfiler.endStartSection("clouds");
+ GlStateManager.matrixMode(5889);
+ GlStateManager.loadIdentity();
+ Project.gluPerspective(this.getFOVModifier(partialTicks, true), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.clipDistance * 4.0F);
+ GlStateManager.matrixMode(5888);
+ GlStateManager.pushMatrix();
+ this.setupFog(0, partialTicks);
+ renderGlobalIn.renderClouds(partialTicks, pass);
+ GlStateManager.disableFog();
+ GlStateManager.popMatrix();
+ GlStateManager.matrixMode(5889);
+ GlStateManager.loadIdentity();
+ Project.gluPerspective(this.getFOVModifier(partialTicks, true), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.clipDistance);
+ GlStateManager.matrixMode(5888);
+ }
+ }
+
+ private void addRainParticles()
+ {
+ float f = this.mc.theWorld.getRainStrength(1.0F);
+
+ if (!Config.isRainFancy())
+ {
+ f /= 2.0F;
+ }
+
+ if (f != 0.0F && Config.isRainSplash())
+ {
+ this.random.setSeed((long)this.rendererUpdateCount * 312987231L);
+ Entity entity = this.mc.getRenderViewEntity();
+ WorldClient worldclient = this.mc.theWorld;
+ BlockPos blockpos = new BlockPos(entity);
+ byte b0 = 10;
+ double d0 = 0.0D;
+ double d1 = 0.0D;
+ double d2 = 0.0D;
+ int i = 0;
+ int j = (int)(100.0F * f * f);
+
+ if (this.mc.gameSettings.particleSetting == 1)
+ {
+ j >>= 1;
+ }
+ else if (this.mc.gameSettings.particleSetting == 2)
+ {
+ j = 0;
+ }
+
+ for (int k = 0; k < j; ++k)
+ {
+ BlockPos blockpos1 = worldclient.getPrecipitationHeight(blockpos.add(this.random.nextInt(b0) - this.random.nextInt(b0), 0, this.random.nextInt(b0) - this.random.nextInt(b0)));
+ BiomeGenBase biomegenbase = worldclient.getBiomeGenForCoords(blockpos1);
+ BlockPos blockpos2 = blockpos1.down();
+ Block block = worldclient.getBlockState(blockpos2).getBlock();
+
+ if (blockpos1.getY() <= blockpos.getY() + b0 && blockpos1.getY() >= blockpos.getY() - b0 && biomegenbase.canSpawnLightningBolt() && biomegenbase.getFloatTemperature(blockpos1) >= 0.15F)
+ {
+ double d3 = this.random.nextDouble();
+ double d4 = this.random.nextDouble();
+
+ if (block.getMaterial() == Material.lava)
+ {
+ this.mc.theWorld.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, (double)blockpos1.getX() + d3, (double)((float)blockpos1.getY() + 0.1F) - block.getBlockBoundsMinY(), (double)blockpos1.getZ() + d4, 0.0D, 0.0D, 0.0D, new int[0]);
+ }
+ else if (block.getMaterial() != Material.air)
+ {
+ block.setBlockBoundsBasedOnState(worldclient, blockpos2);
+ ++i;
+
+ if (this.random.nextInt(i) == 0)
+ {
+ d0 = (double)blockpos2.getX() + d3;
+ d1 = (double)((float)blockpos2.getY() + 0.1F) + block.getBlockBoundsMaxY() - 1.0D;
+ d2 = (double)blockpos2.getZ() + d4;
+ }
+
+ this.mc.theWorld.spawnParticle(EnumParticleTypes.WATER_DROP, (double)blockpos2.getX() + d3, (double)((float)blockpos2.getY() + 0.1F) + block.getBlockBoundsMaxY(), (double)blockpos2.getZ() + d4, 0.0D, 0.0D, 0.0D, new int[0]);
+ }
+ }
+ }
+
+ if (i > 0 && this.random.nextInt(3) < this.rainSoundCounter++)
+ {
+ this.rainSoundCounter = 0;
+
+ if (d1 > (double)(blockpos.getY() + 1) && worldclient.getPrecipitationHeight(blockpos).getY() > MathHelper.floor_float((float)blockpos.getY()))
+ {
+ this.mc.theWorld.playSound(d0, d1, d2, "ambient.weather.rain", 0.1F, 0.5F, false);
+ }
+ else
+ {
+ this.mc.theWorld.playSound(d0, d1, d2, "ambient.weather.rain", 0.2F, 1.0F, false);
+ }
+ }
+ }
+ }
+
+ /**
+ * Render rain and snow
+ */
+ protected void renderRainSnow(float partialTicks)
+ {
+ if (Reflector.ForgeWorldProvider_getWeatherRenderer.exists())
+ {
+ WorldProvider worldprovider = this.mc.theWorld.provider;
+ Object object = Reflector.call(worldprovider, Reflector.ForgeWorldProvider_getWeatherRenderer, new Object[0]);
+
+ if (object != null)
+ {
+ Reflector.callVoid(object, Reflector.IRenderHandler_render, new Object[] {Float.valueOf(partialTicks), this.mc.theWorld, this.mc});
+ return;
+ }
+ }
+
+ float f5 = this.mc.theWorld.getRainStrength(partialTicks);
+
+ if (f5 > 0.0F)
+ {
+ if (Config.isRainOff())
+ {
+ return;
+ }
+
+ this.enableLightmap();
+ Entity entity = this.mc.getRenderViewEntity();
+ WorldClient worldclient = this.mc.theWorld;
+ int i = MathHelper.floor_double(entity.posX);
+ int j = MathHelper.floor_double(entity.posY);
+ int k = MathHelper.floor_double(entity.posZ);
+ Tessellator tessellator = Tessellator.getInstance();
+ WorldRenderer worldrenderer = tessellator.getWorldRenderer();
+ GlStateManager.disableCull();
+ GL11.glNormal3f(0.0F, 1.0F, 0.0F);
+ GlStateManager.enableBlend();
+ GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
+ GlStateManager.alphaFunc(516, 0.1F);
+ double d0 = entity.lastTickPosX + (entity.posX - entity.lastTickPosX) * (double)partialTicks;
+ double d1 = entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * (double)partialTicks;
+ double d2 = entity.lastTickPosZ + (entity.posZ - entity.lastTickPosZ) * (double)partialTicks;
+ int l = MathHelper.floor_double(d1);
+ byte b0 = 5;
+
+ if (Config.isRainFancy())
+ {
+ b0 = 10;
+ }
+
+ byte b1 = -1;
+ float f = (float)this.rendererUpdateCount + partialTicks;
+ worldrenderer.setTranslation(-d0, -d1, -d2);
+
+ if (Config.isRainFancy())
+ {
+ b0 = 10;
+ }
+
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos();
+
+ for (int i1 = k - b0; i1 <= k + b0; ++i1)
+ {
+ for (int j1 = i - b0; j1 <= i + b0; ++j1)
+ {
+ int k1 = (i1 - k + 16) * 32 + j1 - i + 16;
+ double d3 = (double)this.rainXCoords[k1] * 0.5D;
+ double d4 = (double)this.rainYCoords[k1] * 0.5D;
+ blockpos$mutableblockpos.func_181079_c(j1, 0, i1);
+ BiomeGenBase biomegenbase = worldclient.getBiomeGenForCoords(blockpos$mutableblockpos);
+
+ if (biomegenbase.canSpawnLightningBolt() || biomegenbase.getEnableSnow())
+ {
+ int l1 = worldclient.getPrecipitationHeight(blockpos$mutableblockpos).getY();
+ int i2 = j - b0;
+ int j2 = j + b0;
+
+ if (i2 < l1)
+ {
+ i2 = l1;
+ }
+
+ if (j2 < l1)
+ {
+ j2 = l1;
+ }
+
+ int k2 = l1;
+
+ if (l1 < l)
+ {
+ k2 = l;
+ }
+
+ if (i2 != j2)
+ {
+ this.random.setSeed((long)(j1 * j1 * 3121 + j1 * 45238971 ^ i1 * i1 * 418711 + i1 * 13761));
+ blockpos$mutableblockpos.func_181079_c(j1, i2, i1);
+ float f1 = biomegenbase.getFloatTemperature(blockpos$mutableblockpos);
+
+ if (worldclient.getWorldChunkManager().getTemperatureAtHeight(f1, l1) >= 0.15F)
+ {
+ if (b1 != 0)
+ {
+ if (b1 >= 0)
+ {
+ tessellator.draw();
+ }
+
+ b1 = 0;
+ this.mc.getTextureManager().bindTexture(locationRainPng);
+ worldrenderer.begin(7, DefaultVertexFormats.PARTICLE_POSITION_TEX_COLOR_LMAP);
+ }
+
+ double d5 = ((double)(this.rendererUpdateCount + j1 * j1 * 3121 + j1 * 45238971 + i1 * i1 * 418711 + i1 * 13761 & 31) + (double)partialTicks) / 32.0D * (3.0D + this.random.nextDouble());
+ double d6 = (double)((float)j1 + 0.5F) - entity.posX;
+ double d7 = (double)((float)i1 + 0.5F) - entity.posZ;
+ float f2 = MathHelper.sqrt_double(d6 * d6 + d7 * d7) / (float)b0;
+ float f3 = ((1.0F - f2 * f2) * 0.5F + 0.5F) * f5;
+ blockpos$mutableblockpos.func_181079_c(j1, k2, i1);
+ int l2 = worldclient.getCombinedLight(blockpos$mutableblockpos, 0);
+ int i3 = l2 >> 16 & 65535;
+ int j3 = l2 & 65535;
+ worldrenderer.pos((double)j1 - d3 + 0.5D, (double)i2, (double)i1 - d4 + 0.5D).tex(0.0D, (double)i2 * 0.25D + d5).color(1.0F, 1.0F, 1.0F, f3).lightmap(i3, j3).endVertex();
+ worldrenderer.pos((double)j1 + d3 + 0.5D, (double)i2, (double)i1 + d4 + 0.5D).tex(1.0D, (double)i2 * 0.25D + d5).color(1.0F, 1.0F, 1.0F, f3).lightmap(i3, j3).endVertex();
+ worldrenderer.pos((double)j1 + d3 + 0.5D, (double)j2, (double)i1 + d4 + 0.5D).tex(1.0D, (double)j2 * 0.25D + d5).color(1.0F, 1.0F, 1.0F, f3).lightmap(i3, j3).endVertex();
+ worldrenderer.pos((double)j1 - d3 + 0.5D, (double)j2, (double)i1 - d4 + 0.5D).tex(0.0D, (double)j2 * 0.25D + d5).color(1.0F, 1.0F, 1.0F, f3).lightmap(i3, j3).endVertex();
+ }
+ else
+ {
+ if (b1 != 1)
+ {
+ if (b1 >= 0)
+ {
+ tessellator.draw();
+ }
+
+ b1 = 1;
+ this.mc.getTextureManager().bindTexture(locationSnowPng);
+ worldrenderer.begin(7, DefaultVertexFormats.PARTICLE_POSITION_TEX_COLOR_LMAP);
+ }
+
+ double d8 = (double)(((float)(this.rendererUpdateCount & 511) + partialTicks) / 512.0F);
+ double d9 = this.random.nextDouble() + (double)f * 0.01D * (double)((float)this.random.nextGaussian());
+ double d10 = this.random.nextDouble() + (double)(f * (float)this.random.nextGaussian()) * 0.001D;
+ double d11 = (double)((float)j1 + 0.5F) - entity.posX;
+ double d12 = (double)((float)i1 + 0.5F) - entity.posZ;
+ float f6 = MathHelper.sqrt_double(d11 * d11 + d12 * d12) / (float)b0;
+ float f4 = ((1.0F - f6 * f6) * 0.3F + 0.5F) * f5;
+ blockpos$mutableblockpos.func_181079_c(j1, k2, i1);
+ int k3 = (worldclient.getCombinedLight(blockpos$mutableblockpos, 0) * 3 + 15728880) / 4;
+ int l3 = k3 >> 16 & 65535;
+ int i4 = k3 & 65535;
+ worldrenderer.pos((double)j1 - d3 + 0.5D, (double)i2, (double)i1 - d4 + 0.5D).tex(0.0D + d9, (double)i2 * 0.25D + d8 + d10).color(1.0F, 1.0F, 1.0F, f4).lightmap(l3, i4).endVertex();
+ worldrenderer.pos((double)j1 + d3 + 0.5D, (double)i2, (double)i1 + d4 + 0.5D).tex(1.0D + d9, (double)i2 * 0.25D + d8 + d10).color(1.0F, 1.0F, 1.0F, f4).lightmap(l3, i4).endVertex();
+ worldrenderer.pos((double)j1 + d3 + 0.5D, (double)j2, (double)i1 + d4 + 0.5D).tex(1.0D + d9, (double)j2 * 0.25D + d8 + d10).color(1.0F, 1.0F, 1.0F, f4).lightmap(l3, i4).endVertex();
+ worldrenderer.pos((double)j1 - d3 + 0.5D, (double)j2, (double)i1 - d4 + 0.5D).tex(0.0D + d9, (double)j2 * 0.25D + d8 + d10).color(1.0F, 1.0F, 1.0F, f4).lightmap(l3, i4).endVertex();
+ }
+ }
+ }
+ }
+ }
+
+ if (b1 >= 0)
+ {
+ tessellator.draw();
+ }
+
+ worldrenderer.setTranslation(0.0D, 0.0D, 0.0D);
+ GlStateManager.enableCull();
+ GlStateManager.disableBlend();
+ GlStateManager.alphaFunc(516, 0.1F);
+ this.disableLightmap();
+ }
+ }
+
+ /**
+ * Setup orthogonal projection for rendering GUI screen overlays
+ */
+ public void setupOverlayRendering()
+ {
+ ScaledResolution scaledresolution = new ScaledResolution(this.mc);
+ GlStateManager.clear(256);
+ GlStateManager.matrixMode(5889);
+ GlStateManager.loadIdentity();
+ GlStateManager.ortho(0.0D, scaledresolution.getScaledWidth_double(), scaledresolution.getScaledHeight_double(), 0.0D, 1000.0D, 3000.0D);
+ GlStateManager.matrixMode(5888);
+ GlStateManager.loadIdentity();
+ GlStateManager.translate(0.0F, 0.0F, -2000.0F);
+ }
+
+ /**
+ * calculates fog and calls glClearColor
+ */
+ private void updateFogColor(float partialTicks)
+ {
+ WorldClient worldclient = this.mc.theWorld;
+ Entity entity = this.mc.getRenderViewEntity();
+ float f = 0.25F + 0.75F * (float)this.mc.gameSettings.renderDistanceChunks / 32.0F;
+ f = 1.0F - (float)Math.pow((double)f, 0.25D);
+ Vec3 vec3 = worldclient.getSkyColor(this.mc.getRenderViewEntity(), partialTicks);
+ vec3 = CustomColors.getWorldSkyColor(vec3, worldclient, this.mc.getRenderViewEntity(), partialTicks);
+ float f1 = (float)vec3.xCoord;
+ float f2 = (float)vec3.yCoord;
+ float f3 = (float)vec3.zCoord;
+ Vec3 vec31 = worldclient.getFogColor(partialTicks);
+ vec31 = CustomColors.getWorldFogColor(vec31, worldclient, this.mc.getRenderViewEntity(), partialTicks);
+ this.fogColorRed = (float)vec31.xCoord;
+ this.fogColorGreen = (float)vec31.yCoord;
+ this.fogColorBlue = (float)vec31.zCoord;
+
+ if (this.mc.gameSettings.renderDistanceChunks >= 4)
+ {
+ double d0 = -1.0D;
+ Vec3 vec32 = MathHelper.sin(worldclient.getCelestialAngleRadians(partialTicks)) > 0.0F ? new Vec3(d0, 0.0D, 0.0D) : new Vec3(1.0D, 0.0D, 0.0D);
+ float f4 = (float)entity.getLook(partialTicks).dotProduct(vec32);
+
+ if (f4 < 0.0F)
+ {
+ f4 = 0.0F;
+ }
+
+ if (f4 > 0.0F)
+ {
+ float[] afloat = worldclient.provider.calcSunriseSunsetColors(worldclient.getCelestialAngle(partialTicks), partialTicks);
+
+ if (afloat != null)
+ {
+ f4 = f4 * afloat[3];
+ this.fogColorRed = this.fogColorRed * (1.0F - f4) + afloat[0] * f4;
+ this.fogColorGreen = this.fogColorGreen * (1.0F - f4) + afloat[1] * f4;
+ this.fogColorBlue = this.fogColorBlue * (1.0F - f4) + afloat[2] * f4;
+ }
+ }
+ }
+
+ this.fogColorRed += (f1 - this.fogColorRed) * f;
+ this.fogColorGreen += (f2 - this.fogColorGreen) * f;
+ this.fogColorBlue += (f3 - this.fogColorBlue) * f;
+ float f10 = worldclient.getRainStrength(partialTicks);
+
+ if (f10 > 0.0F)
+ {
+ float f5 = 1.0F - f10 * 0.5F;
+ float f12 = 1.0F - f10 * 0.4F;
+ this.fogColorRed *= f5;
+ this.fogColorGreen *= f5;
+ this.fogColorBlue *= f12;
+ }
+
+ float f11 = worldclient.getThunderStrength(partialTicks);
+
+ if (f11 > 0.0F)
+ {
+ float f13 = 1.0F - f11 * 0.5F;
+ this.fogColorRed *= f13;
+ this.fogColorGreen *= f13;
+ this.fogColorBlue *= f13;
+ }
+
+ Block block = ActiveRenderInfo.getBlockAtEntityViewpoint(this.mc.theWorld, entity, partialTicks);
+
+ if (this.cloudFog)
+ {
+ Vec3 vec33 = worldclient.getCloudColour(partialTicks);
+ this.fogColorRed = (float)vec33.xCoord;
+ this.fogColorGreen = (float)vec33.yCoord;
+ this.fogColorBlue = (float)vec33.zCoord;
+ }
+ else if (block.getMaterial() == Material.water)
+ {
+ float f8 = (float)EnchantmentHelper.getRespiration(entity) * 0.2F;
+
+ if (entity instanceof EntityLivingBase && ((EntityLivingBase)entity).isPotionActive(Potion.waterBreathing))
+ {
+ f8 = f8 * 0.3F + 0.6F;
+ }
+
+ this.fogColorRed = 0.02F + f8;
+ this.fogColorGreen = 0.02F + f8;
+ this.fogColorBlue = 0.2F + f8;
+ Vec3 vec34 = CustomColors.getUnderwaterColor(this.mc.theWorld, this.mc.getRenderViewEntity().posX, this.mc.getRenderViewEntity().posY + 1.0D, this.mc.getRenderViewEntity().posZ);
+
+ if (vec34 != null)
+ {
+ this.fogColorRed = (float)vec34.xCoord;
+ this.fogColorGreen = (float)vec34.yCoord;
+ this.fogColorBlue = (float)vec34.zCoord;
+ }
+ }
+ else if (block.getMaterial() == Material.lava)
+ {
+ this.fogColorRed = 0.6F;
+ this.fogColorGreen = 0.1F;
+ this.fogColorBlue = 0.0F;
+ }
+
+ float f9 = this.fogColor2 + (this.fogColor1 - this.fogColor2) * partialTicks;
+ this.fogColorRed *= f9;
+ this.fogColorGreen *= f9;
+ this.fogColorBlue *= f9;
+ double d2 = worldclient.provider.getVoidFogYFactor();
+ double d1 = (entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * (double)partialTicks) * d2;
+
+ if (entity instanceof EntityLivingBase && ((EntityLivingBase)entity).isPotionActive(Potion.blindness))
+ {
+ int i = ((EntityLivingBase)entity).getActivePotionEffect(Potion.blindness).getDuration();
+
+ if (i < 20)
+ {
+ d1 *= (double)(1.0F - (float)i / 20.0F);
+ }
+ else
+ {
+ d1 = 0.0D;
+ }
+ }
+
+ if (d1 < 1.0D)
+ {
+ if (d1 < 0.0D)
+ {
+ d1 = 0.0D;
+ }
+
+ d1 = d1 * d1;
+ this.fogColorRed = (float)((double)this.fogColorRed * d1);
+ this.fogColorGreen = (float)((double)this.fogColorGreen * d1);
+ this.fogColorBlue = (float)((double)this.fogColorBlue * d1);
+ }
+
+ if (this.bossColorModifier > 0.0F)
+ {
+ float f14 = this.bossColorModifierPrev + (this.bossColorModifier - this.bossColorModifierPrev) * partialTicks;
+ this.fogColorRed = this.fogColorRed * (1.0F - f14) + this.fogColorRed * 0.7F * f14;
+ this.fogColorGreen = this.fogColorGreen * (1.0F - f14) + this.fogColorGreen * 0.6F * f14;
+ this.fogColorBlue = this.fogColorBlue * (1.0F - f14) + this.fogColorBlue * 0.6F * f14;
+ }
+
+ if (entity instanceof EntityLivingBase && ((EntityLivingBase)entity).isPotionActive(Potion.nightVision))
+ {
+ float f15 = this.getNightVisionBrightness((EntityLivingBase)entity, partialTicks);
+ float f6 = 1.0F / this.fogColorRed;
+
+ if (f6 > 1.0F / this.fogColorGreen)
+ {
+ f6 = 1.0F / this.fogColorGreen;
+ }
+
+ if (f6 > 1.0F / this.fogColorBlue)
+ {
+ f6 = 1.0F / this.fogColorBlue;
+ }
+
+ this.fogColorRed = this.fogColorRed * (1.0F - f15) + this.fogColorRed * f6 * f15;
+ this.fogColorGreen = this.fogColorGreen * (1.0F - f15) + this.fogColorGreen * f6 * f15;
+ this.fogColorBlue = this.fogColorBlue * (1.0F - f15) + this.fogColorBlue * f6 * f15;
+ }
+
+ if (this.mc.gameSettings.anaglyph)
+ {
+ float f16 = (this.fogColorRed * 30.0F + this.fogColorGreen * 59.0F + this.fogColorBlue * 11.0F) / 100.0F;
+ float f17 = (this.fogColorRed * 30.0F + this.fogColorGreen * 70.0F) / 100.0F;
+ float f7 = (this.fogColorRed * 30.0F + this.fogColorBlue * 70.0F) / 100.0F;
+ this.fogColorRed = f16;
+ this.fogColorGreen = f17;
+ this.fogColorBlue = f7;
+ }
+
+ if (Reflector.EntityViewRenderEvent_FogColors_Constructor.exists())
+ {
+ Object object = Reflector.newInstance(Reflector.EntityViewRenderEvent_FogColors_Constructor, new Object[] {this, entity, block, Float.valueOf(partialTicks), Float.valueOf(this.fogColorRed), Float.valueOf(this.fogColorGreen), Float.valueOf(this.fogColorBlue)});
+ Reflector.postForgeBusEvent(object);
+ this.fogColorRed = Reflector.getFieldValueFloat(object, Reflector.EntityViewRenderEvent_FogColors_red, this.fogColorRed);
+ this.fogColorGreen = Reflector.getFieldValueFloat(object, Reflector.EntityViewRenderEvent_FogColors_green, this.fogColorGreen);
+ this.fogColorBlue = Reflector.getFieldValueFloat(object, Reflector.EntityViewRenderEvent_FogColors_blue, this.fogColorBlue);
+ }
+
+ Shaders.setClearColor(this.fogColorRed, this.fogColorGreen, this.fogColorBlue, 0.0F);
+ }
+
+ /**
+ * Sets up the fog to be rendered. If the arg passed in is -1 the fog starts at 0 and goes to 80% of far plane
+ * distance and is used for sky rendering.
+ */
+ private void setupFog(int p_78468_1_, float partialTicks)
+ {
+ Entity entity = this.mc.getRenderViewEntity();
+ boolean flag = false;
+ this.fogStandard = false;
+
+ if (entity instanceof EntityPlayer)
+ {
+ flag = ((EntityPlayer)entity).capabilities.isCreativeMode;
+ }
+
+ GL11.glFog(GL11.GL_FOG_COLOR, (FloatBuffer)this.setFogColorBuffer(this.fogColorRed, this.fogColorGreen, this.fogColorBlue, 1.0F));
+ GL11.glNormal3f(0.0F, -1.0F, 0.0F);
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ Block block = ActiveRenderInfo.getBlockAtEntityViewpoint(this.mc.theWorld, entity, partialTicks);
+ float f1 = -1.0F;
+
+ if (Reflector.ForgeHooksClient_getFogDensity.exists())
+ {
+ f1 = Reflector.callFloat(Reflector.ForgeHooksClient_getFogDensity, new Object[] {this, entity, block, Float.valueOf(partialTicks), Float.valueOf(0.1F)});
+ }
+
+ if (f1 >= 0.0F)
+ {
+ GlStateManager.setFogDensity(f1);
+ }
+ else if (entity instanceof EntityLivingBase && ((EntityLivingBase)entity).isPotionActive(Potion.blindness))
+ {
+ float f2 = 5.0F;
+ int i = ((EntityLivingBase)entity).getActivePotionEffect(Potion.blindness).getDuration();
+
+ if (i < 20)
+ {
+ f2 = 5.0F + (this.farPlaneDistance - 5.0F) * (1.0F - (float)i / 20.0F);
+ }
+
+ if (Config.isShaders())
+ {
+ Shaders.setFog(9729);
+ }
+ else
+ {
+ GlStateManager.setFog(9729);
+ }
+
+ if (p_78468_1_ == -1)
+ {
+ GlStateManager.setFogStart(0.0F);
+ GlStateManager.setFogEnd(f2 * 0.8F);
+ }
+ else
+ {
+ GlStateManager.setFogStart(f2 * 0.25F);
+ GlStateManager.setFogEnd(f2);
+ }
+
+ if (GLContext.getCapabilities().GL_NV_fog_distance && Config.isFogFancy())
+ {
+ GL11.glFogi(34138, 34139);
+ }
+ }
+ else if (this.cloudFog)
+ {
+ if (Config.isShaders())
+ {
+ Shaders.setFog(2048);
+ }
+ else
+ {
+ GlStateManager.setFog(2048);
+ }
+
+ GlStateManager.setFogDensity(0.1F);
+ }
+ else if (block.getMaterial() == Material.water)
+ {
+ if (Config.isShaders())
+ {
+ Shaders.setFog(2048);
+ }
+ else
+ {
+ GlStateManager.setFog(2048);
+ }
+
+ if (entity instanceof EntityLivingBase && ((EntityLivingBase)entity).isPotionActive(Potion.waterBreathing))
+ {
+ GlStateManager.setFogDensity(0.01F);
+ }
+ else
+ {
+ GlStateManager.setFogDensity(0.1F - (float)EnchantmentHelper.getRespiration(entity) * 0.03F);
+ }
+
+ if (Config.isClearWater())
+ {
+ GlStateManager.setFogDensity(0.02F);
+ }
+ }
+ else if (block.getMaterial() == Material.lava)
+ {
+ if (Config.isShaders())
+ {
+ Shaders.setFog(2048);
+ }
+ else
+ {
+ GlStateManager.setFog(2048);
+ }
+
+ GlStateManager.setFogDensity(2.0F);
+ }
+ else
+ {
+ float f = this.farPlaneDistance;
+ this.fogStandard = true;
+
+ if (Config.isShaders())
+ {
+ Shaders.setFog(9729);
+ }
+ else
+ {
+ GlStateManager.setFog(9729);
+ }
+
+ if (p_78468_1_ == -1)
+ {
+ GlStateManager.setFogStart(0.0F);
+ GlStateManager.setFogEnd(f);
+ }
+ else
+ {
+ GlStateManager.setFogStart(f * Config.getFogStart());
+ GlStateManager.setFogEnd(f);
+ }
+
+ if (GLContext.getCapabilities().GL_NV_fog_distance)
+ {
+ if (Config.isFogFancy())
+ {
+ GL11.glFogi(34138, 34139);
+ }
+
+ if (Config.isFogFast())
+ {
+ GL11.glFogi(34138, 34140);
+ }
+ }
+
+ if (this.mc.theWorld.provider.doesXZShowFog((int)entity.posX, (int)entity.posZ))
+ {
+ GlStateManager.setFogStart(f * 0.05F);
+ GlStateManager.setFogEnd(f);
+ }
+
+ if (Reflector.ForgeHooksClient_onFogRender.exists())
+ {
+ Reflector.callVoid(Reflector.ForgeHooksClient_onFogRender, new Object[] {this, entity, block, Float.valueOf(partialTicks), Integer.valueOf(p_78468_1_), Float.valueOf(f)});
+ }
+ }
+
+ GlStateManager.enableColorMaterial();
+ GlStateManager.enableFog();
+ GlStateManager.colorMaterial(1028, 4608);
+ }
+
+ /**
+ * Update and return fogColorBuffer with the RGBA values passed as arguments
+ */
+ private FloatBuffer setFogColorBuffer(float red, float green, float blue, float alpha)
+ {
+ if (Config.isShaders())
+ {
+ Shaders.setFogColor(red, green, blue);
+ }
+
+ this.fogColorBuffer.clear();
+ this.fogColorBuffer.put(red).put(green).put(blue).put(alpha);
+ this.fogColorBuffer.flip();
+ return this.fogColorBuffer;
+ }
+
+ public MapItemRenderer getMapItemRenderer()
+ {
+ return this.theMapItemRenderer;
+ }
+
+ private void waitForServerThread()
+ {
+ this.serverWaitTimeCurrent = 0;
+
+ if (Config.isSmoothWorld() && Config.isSingleProcessor())
+ {
+ if (this.mc.isIntegratedServerRunning())
+ {
+ IntegratedServer integratedserver = this.mc.getIntegratedServer();
+
+ if (integratedserver != null)
+ {
+ boolean flag = this.mc.isGamePaused();
+
+ if (!flag && !(this.mc.currentScreen instanceof GuiDownloadTerrain))
+ {
+ if (this.serverWaitTime > 0)
+ {
+ Lagometer.timerServer.start();
+ Config.sleep((long)this.serverWaitTime);
+ Lagometer.timerServer.end();
+ this.serverWaitTimeCurrent = this.serverWaitTime;
+ }
+
+ long i = System.nanoTime() / 1000000L;
+
+ if (this.lastServerTime != 0L && this.lastServerTicks != 0)
+ {
+ long j = i - this.lastServerTime;
+
+ if (j < 0L)
+ {
+ this.lastServerTime = i;
+ j = 0L;
+ }
+
+ if (j >= 50L)
+ {
+ this.lastServerTime = i;
+ int k = integratedserver.getTickCounter();
+ int l = k - this.lastServerTicks;
+
+ if (l < 0)
+ {
+ this.lastServerTicks = k;
+ l = 0;
+ }
+
+ if (l < 1 && this.serverWaitTime < 100)
+ {
+ this.serverWaitTime += 2;
+ }
+
+ if (l > 1 && this.serverWaitTime > 0)
+ {
+ --this.serverWaitTime;
+ }
+
+ this.lastServerTicks = k;
+ }
+ }
+ else
+ {
+ this.lastServerTime = i;
+ this.lastServerTicks = integratedserver.getTickCounter();
+ this.avgServerTickDiff = 1.0F;
+ this.avgServerTimeDiff = 50.0F;
+ }
+ }
+ else
+ {
+ if (this.mc.currentScreen instanceof GuiDownloadTerrain)
+ {
+ Config.sleep(20L);
+ }
+
+ this.lastServerTime = 0L;
+ this.lastServerTicks = 0;
+ }
+ }
+ }
+ }
+ else
+ {
+ this.lastServerTime = 0L;
+ this.lastServerTicks = 0;
+ }
+ }
+
+ private void frameInit()
+ {
+ if (!this.initialized)
+ {
+ TextureUtils.registerResourceListener();
+
+ if (Config.getBitsOs() == 64 && Config.getBitsJre() == 32)
+ {
+ Config.setNotify64BitJava(true);
+ }
+
+ this.initialized = true;
+ }
+
+ Config.checkDisplayMode();
+ World world = this.mc.theWorld;
+
+ if (world != null)
+ {
+ if (Config.getNewRelease() != null)
+ {
+ String s = "HD_U".replace("HD_U", "HD Ultra").replace("L", "Light");
+ String s1 = s + " " + Config.getNewRelease();
+ ChatComponentText chatcomponenttext = new ChatComponentText(I18n.format("of.message.newVersion", new Object[] {s1}));
+ this.mc.ingameGUI.getChatGUI().printChatMessage(chatcomponenttext);
+ Config.setNewRelease((String)null);
+ }
+
+ if (Config.isNotify64BitJava())
+ {
+ Config.setNotify64BitJava(false);
+ ChatComponentText chatcomponenttext1 = new ChatComponentText(I18n.format("of.message.java64Bit", new Object[0]));
+ this.mc.ingameGUI.getChatGUI().printChatMessage(chatcomponenttext1);
+ }
+ }
+
+ if (this.mc.currentScreen instanceof MainMenu)
+ {
+ this.updateMainMenu((MainMenu)this.mc.currentScreen);
+ }
+
+ if (this.updatedWorld != world)
+ {
+ RandomMobs.worldChanged(this.updatedWorld, world);
+ Config.updateThreadPriorities();
+ this.lastServerTime = 0L;
+ this.lastServerTicks = 0;
+ this.updatedWorld = world;
+ }
+
+ if (!this.setFxaaShader(Shaders.configAntialiasingLevel))
+ {
+ Shaders.configAntialiasingLevel = 0;
+ }
+ }
+
+ private void frameFinish()
+ {
+ if (this.mc.theWorld != null)
+ {
+ long i = System.currentTimeMillis();
+
+ if (i > this.lastErrorCheckTimeMs + 10000L)
+ {
+ this.lastErrorCheckTimeMs = i;
+ int j = GL11.glGetError();
+
+ if (j != 0)
+ {
+ String s = GLU.gluErrorString(j);
+ ChatComponentText chatcomponenttext = new ChatComponentText(I18n.format("of.message.openglError", new Object[] {Integer.valueOf(j), s}));
+ this.mc.ingameGUI.getChatGUI().printChatMessage(chatcomponenttext);
+ }
+ }
+ }
+ }
+
+ private void updateMainMenu(MainMenu p_updateMainMenu_1_)
+ {
+ try
+ {
+ String s = null;
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(new Date());
+ int i = calendar.get(5);
+ int j = calendar.get(2) + 1;
+
+ if (i == 8 && j == 4)
+ {
+ s = "Happy birthday, OptiFine!";
+ }
+
+ if (i == 14 && j == 8)
+ {
+ s = "Happy birthday, sp614x!";
+ }
+
+ if (s == null)
+ {
+ return;
+ }
+
+ Field[] afield = MainMenu.class.getDeclaredFields();
+
+ for (int k = 0; k < afield.length; ++k)
+ {
+ if (afield[k].getType() == String.class)
+ {
+ afield[k].setAccessible(true);
+ afield[k].set(p_updateMainMenu_1_, s);
+ break;
+ }
+ }
+ }
+ catch (Throwable var8)
+ {
+ ;
+ }
+ }
+
+ public boolean setFxaaShader(int p_setFxaaShader_1_)
+ {
+ if (!OpenGlHelper.isFramebufferEnabled())
+ {
+ return false;
+ }
+ else if (this.theShaderGroup != null && this.theShaderGroup != this.fxaaShaders[2] && this.theShaderGroup != this.fxaaShaders[4])
+ {
+ return true;
+ }
+ else if (p_setFxaaShader_1_ != 2 && p_setFxaaShader_1_ != 4)
+ {
+ if (this.theShaderGroup == null)
+ {
+ return true;
+ }
+ else
+ {
+ this.theShaderGroup.deleteShaderGroup();
+ this.theShaderGroup = null;
+ return true;
+ }
+ }
+ else if (this.theShaderGroup != null && this.theShaderGroup == this.fxaaShaders[p_setFxaaShader_1_])
+ {
+ return true;
+ }
+ else if (this.mc.theWorld == null)
+ {
+ return true;
+ }
+ else
+ {
+ this.loadShader(new ResourceLocation("shaders/post/fxaa_of_" + p_setFxaaShader_1_ + "x.json"));
+ this.fxaaShaders[p_setFxaaShader_1_] = this.theShaderGroup;
+ return this.useShader;
+ }
+ }
+}
diff --git a/src/LayerCape.java b/src/LayerCape.java
new file mode 100644
index 0000000..3f2ee1e
--- /dev/null
+++ b/src/LayerCape.java
@@ -0,0 +1,254 @@
+package net.minecraft.client.renderer.entity.layers;
+
+import animeware.cosmetic.CapeChecker;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EnumPlayerModelParts;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+
+public class LayerCape implements LayerRenderer
+{
+ private final RenderPlayer playerRenderer;
+ private static final String __OBFID = "CL_00002425";
+
+ public LayerCape(RenderPlayer playerRendererIn)
+ {
+ this.playerRenderer = playerRendererIn;
+ }
+
+ public void doRenderLayer(AbstractClientPlayer entitylivingbaseIn, float p_177141_2_, float p_177141_3_, float partialTicks, float p_177141_5_, float p_177141_6_, float p_177141_7_, float scale)
+ {
+ if (entitylivingbaseIn.hasPlayerInfo() && !entitylivingbaseIn.isInvisible() && entitylivingbaseIn.isWearing(EnumPlayerModelParts.CAPE) && CapeChecker.ownsOwnerCape(entitylivingbaseIn))
+ {
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/ownercape.png"));
+ GlStateManager.pushMatrix();
+ GlStateManager.translate(0.0F, 0.0F, 0.125F);
+ double d0 = entitylivingbaseIn.prevChasingPosX + (entitylivingbaseIn.chasingPosX - entitylivingbaseIn.prevChasingPosX) * (double)partialTicks - (entitylivingbaseIn.prevPosX + (entitylivingbaseIn.posX - entitylivingbaseIn.prevPosX) * (double)partialTicks);
+ double d1 = entitylivingbaseIn.prevChasingPosY + (entitylivingbaseIn.chasingPosY - entitylivingbaseIn.prevChasingPosY) * (double)partialTicks - (entitylivingbaseIn.prevPosY + (entitylivingbaseIn.posY - entitylivingbaseIn.prevPosY) * (double)partialTicks);
+ double d2 = entitylivingbaseIn.prevChasingPosZ + (entitylivingbaseIn.chasingPosZ - entitylivingbaseIn.prevChasingPosZ) * (double)partialTicks - (entitylivingbaseIn.prevPosZ + (entitylivingbaseIn.posZ - entitylivingbaseIn.prevPosZ) * (double)partialTicks);
+ float f = entitylivingbaseIn.prevRenderYawOffset + (entitylivingbaseIn.renderYawOffset - entitylivingbaseIn.prevRenderYawOffset) * partialTicks;
+ double d3 = (double)MathHelper.sin(f * (float)Math.PI / 180.0F);
+ double d4 = (double)(-MathHelper.cos(f * (float)Math.PI / 180.0F));
+ float f1 = (float)d1 * 10.0F;
+ f1 = MathHelper.clamp_float(f1, -6.0F, 32.0F);
+ float f2 = (float)(d0 * d3 + d2 * d4) * 100.0F;
+ float f3 = (float)(d0 * d4 - d2 * d3) * 100.0F;
+
+ if (f2 < 0.0F)
+ {
+ f2 = 0.0F;
+ }
+
+ if (f2 > 165.0F)
+ {
+ f2 = 165.0F;
+ }
+
+ float f4 = entitylivingbaseIn.prevCameraYaw + (entitylivingbaseIn.cameraYaw - entitylivingbaseIn.prevCameraYaw) * partialTicks;
+ f1 = f1 + MathHelper.sin((entitylivingbaseIn.prevDistanceWalkedModified + (entitylivingbaseIn.distanceWalkedModified - entitylivingbaseIn.prevDistanceWalkedModified) * partialTicks) * 6.0F) * 32.0F * f4;
+
+ if (entitylivingbaseIn.isSneaking())
+ {
+ f1 += 25.0F;
+ GlStateManager.translate(0.0F, 0.142F, -0.0178F);
+ }
+
+ GlStateManager.rotate(6.0F + f2 / 2.0F + f1, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(f3 / 2.0F, 0.0F, 0.0F, 1.0F);
+ GlStateManager.rotate(-f3 / 2.0F, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F);
+ this.playerRenderer.getMainModel().renderCape(0.0625F);
+ GlStateManager.popMatrix();
+ }
+
+ else if (entitylivingbaseIn.hasPlayerInfo() && !entitylivingbaseIn.isInvisible() && entitylivingbaseIn.isWearing(EnumPlayerModelParts.CAPE) && CapeChecker.ownsYtCape(entitylivingbaseIn))
+ {
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/yt.png"));
+ GlStateManager.pushMatrix();
+ GlStateManager.translate(0.0F, 0.0F, 0.125F);
+ double d0 = entitylivingbaseIn.prevChasingPosX + (entitylivingbaseIn.chasingPosX - entitylivingbaseIn.prevChasingPosX) * (double)partialTicks - (entitylivingbaseIn.prevPosX + (entitylivingbaseIn.posX - entitylivingbaseIn.prevPosX) * (double)partialTicks);
+ double d1 = entitylivingbaseIn.prevChasingPosY + (entitylivingbaseIn.chasingPosY - entitylivingbaseIn.prevChasingPosY) * (double)partialTicks - (entitylivingbaseIn.prevPosY + (entitylivingbaseIn.posY - entitylivingbaseIn.prevPosY) * (double)partialTicks);
+ double d2 = entitylivingbaseIn.prevChasingPosZ + (entitylivingbaseIn.chasingPosZ - entitylivingbaseIn.prevChasingPosZ) * (double)partialTicks - (entitylivingbaseIn.prevPosZ + (entitylivingbaseIn.posZ - entitylivingbaseIn.prevPosZ) * (double)partialTicks);
+ float f = entitylivingbaseIn.prevRenderYawOffset + (entitylivingbaseIn.renderYawOffset - entitylivingbaseIn.prevRenderYawOffset) * partialTicks;
+ double d3 = (double)MathHelper.sin(f * (float)Math.PI / 180.0F);
+ double d4 = (double)(-MathHelper.cos(f * (float)Math.PI / 180.0F));
+ float f1 = (float)d1 * 10.0F;
+ f1 = MathHelper.clamp_float(f1, -6.0F, 32.0F);
+ float f2 = (float)(d0 * d3 + d2 * d4) * 100.0F;
+ float f3 = (float)(d0 * d4 - d2 * d3) * 100.0F;
+
+ if (f2 < 0.0F)
+ {
+ f2 = 0.0F;
+ }
+
+ if (f2 > 165.0F)
+ {
+ f2 = 165.0F;
+ }
+
+ float f4 = entitylivingbaseIn.prevCameraYaw + (entitylivingbaseIn.cameraYaw - entitylivingbaseIn.prevCameraYaw) * partialTicks;
+ f1 = f1 + MathHelper.sin((entitylivingbaseIn.prevDistanceWalkedModified + (entitylivingbaseIn.distanceWalkedModified - entitylivingbaseIn.prevDistanceWalkedModified) * partialTicks) * 6.0F) * 32.0F * f4;
+
+ if (entitylivingbaseIn.isSneaking())
+ {
+ f1 += 25.0F;
+ GlStateManager.translate(0.0F, 0.142F, -0.0178F);
+ }
+
+ GlStateManager.rotate(6.0F + f2 / 2.0F + f1, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(f3 / 2.0F, 0.0F, 0.0F, 1.0F);
+ GlStateManager.rotate(-f3 / 2.0F, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F);
+ this.playerRenderer.getMainModel().renderCape(0.0625F);
+ GlStateManager.popMatrix();
+ }
+
+ else if (entitylivingbaseIn.hasPlayerInfo() && !entitylivingbaseIn.isInvisible() && entitylivingbaseIn.isWearing(EnumPlayerModelParts.CAPE) && CapeChecker.ownsQuickCape(entitylivingbaseIn))
+ {
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/quick.png"));
+ GlStateManager.pushMatrix();
+ GlStateManager.translate(0.0F, 0.0F, 0.125F);
+ double d0 = entitylivingbaseIn.prevChasingPosX + (entitylivingbaseIn.chasingPosX - entitylivingbaseIn.prevChasingPosX) * (double)partialTicks - (entitylivingbaseIn.prevPosX + (entitylivingbaseIn.posX - entitylivingbaseIn.prevPosX) * (double)partialTicks);
+ double d1 = entitylivingbaseIn.prevChasingPosY + (entitylivingbaseIn.chasingPosY - entitylivingbaseIn.prevChasingPosY) * (double)partialTicks - (entitylivingbaseIn.prevPosY + (entitylivingbaseIn.posY - entitylivingbaseIn.prevPosY) * (double)partialTicks);
+ double d2 = entitylivingbaseIn.prevChasingPosZ + (entitylivingbaseIn.chasingPosZ - entitylivingbaseIn.prevChasingPosZ) * (double)partialTicks - (entitylivingbaseIn.prevPosZ + (entitylivingbaseIn.posZ - entitylivingbaseIn.prevPosZ) * (double)partialTicks);
+ float f = entitylivingbaseIn.prevRenderYawOffset + (entitylivingbaseIn.renderYawOffset - entitylivingbaseIn.prevRenderYawOffset) * partialTicks;
+ double d3 = (double)MathHelper.sin(f * (float)Math.PI / 180.0F);
+ double d4 = (double)(-MathHelper.cos(f * (float)Math.PI / 180.0F));
+ float f1 = (float)d1 * 10.0F;
+ f1 = MathHelper.clamp_float(f1, -6.0F, 32.0F);
+ float f2 = (float)(d0 * d3 + d2 * d4) * 100.0F;
+ float f3 = (float)(d0 * d4 - d2 * d3) * 100.0F;
+
+ if (f2 < 0.0F)
+ {
+ f2 = 0.0F;
+ }
+
+ if (f2 > 165.0F)
+ {
+ f2 = 165.0F;
+ }
+
+ float f4 = entitylivingbaseIn.prevCameraYaw + (entitylivingbaseIn.cameraYaw - entitylivingbaseIn.prevCameraYaw) * partialTicks;
+ f1 = f1 + MathHelper.sin((entitylivingbaseIn.prevDistanceWalkedModified + (entitylivingbaseIn.distanceWalkedModified - entitylivingbaseIn.prevDistanceWalkedModified) * partialTicks) * 6.0F) * 32.0F * f4;
+
+ if (entitylivingbaseIn.isSneaking())
+ {
+ f1 += 25.0F;
+ GlStateManager.translate(0.0F, 0.142F, -0.0178F);
+ }
+
+ GlStateManager.rotate(6.0F + f2 / 2.0F + f1, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(f3 / 2.0F, 0.0F, 0.0F, 1.0F);
+ GlStateManager.rotate(-f3 / 2.0F, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F);
+ this.playerRenderer.getMainModel().renderCape(0.0625F);
+ GlStateManager.popMatrix();
+ }
+
+ else if (entitylivingbaseIn.hasPlayerInfo() && !entitylivingbaseIn.isInvisible() && entitylivingbaseIn.isWearing(EnumPlayerModelParts.CAPE) && CapeChecker.ownsDevCape(entitylivingbaseIn))
+ {
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/devcape.png"));
+ GlStateManager.pushMatrix();
+ GlStateManager.translate(0.0F, 0.0F, 0.125F);
+ double d0 = entitylivingbaseIn.prevChasingPosX + (entitylivingbaseIn.chasingPosX - entitylivingbaseIn.prevChasingPosX) * (double)partialTicks - (entitylivingbaseIn.prevPosX + (entitylivingbaseIn.posX - entitylivingbaseIn.prevPosX) * (double)partialTicks);
+ double d1 = entitylivingbaseIn.prevChasingPosY + (entitylivingbaseIn.chasingPosY - entitylivingbaseIn.prevChasingPosY) * (double)partialTicks - (entitylivingbaseIn.prevPosY + (entitylivingbaseIn.posY - entitylivingbaseIn.prevPosY) * (double)partialTicks);
+ double d2 = entitylivingbaseIn.prevChasingPosZ + (entitylivingbaseIn.chasingPosZ - entitylivingbaseIn.prevChasingPosZ) * (double)partialTicks - (entitylivingbaseIn.prevPosZ + (entitylivingbaseIn.posZ - entitylivingbaseIn.prevPosZ) * (double)partialTicks);
+ float f = entitylivingbaseIn.prevRenderYawOffset + (entitylivingbaseIn.renderYawOffset - entitylivingbaseIn.prevRenderYawOffset) * partialTicks;
+ double d3 = (double)MathHelper.sin(f * (float)Math.PI / 180.0F);
+ double d4 = (double)(-MathHelper.cos(f * (float)Math.PI / 180.0F));
+ float f1 = (float)d1 * 10.0F;
+ f1 = MathHelper.clamp_float(f1, -6.0F, 32.0F);
+ float f2 = (float)(d0 * d3 + d2 * d4) * 100.0F;
+ float f3 = (float)(d0 * d4 - d2 * d3) * 100.0F;
+
+ if (f2 < 0.0F)
+ {
+ f2 = 0.0F;
+ }
+
+ if (f2 > 165.0F)
+ {
+ f2 = 165.0F;
+ }
+
+ float f4 = entitylivingbaseIn.prevCameraYaw + (entitylivingbaseIn.cameraYaw - entitylivingbaseIn.prevCameraYaw) * partialTicks;
+ f1 = f1 + MathHelper.sin((entitylivingbaseIn.prevDistanceWalkedModified + (entitylivingbaseIn.distanceWalkedModified - entitylivingbaseIn.prevDistanceWalkedModified) * partialTicks) * 6.0F) * 32.0F * f4;
+
+ if (entitylivingbaseIn.isSneaking())
+ {
+ f1 += 25.0F;
+ GlStateManager.translate(0.0F, 0.142F, -0.0178F);
+ }
+
+ GlStateManager.rotate(6.0F + f2 / 2.0F + f1, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(f3 / 2.0F, 0.0F, 0.0F, 1.0F);
+ GlStateManager.rotate(-f3 / 2.0F, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F);
+ this.playerRenderer.getMainModel().renderCape(0.0625F);
+ GlStateManager.popMatrix();
+ }
+
+ else if (entitylivingbaseIn.hasPlayerInfo() && !entitylivingbaseIn.isInvisible() && entitylivingbaseIn.isWearing(EnumPlayerModelParts.CAPE) && CapeChecker.ownsZeroTwoCape(entitylivingbaseIn))
+ {
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/cape.png"));
+ GlStateManager.pushMatrix();
+ GlStateManager.translate(0.0F, 0.0F, 0.125F);
+ double d0 = entitylivingbaseIn.prevChasingPosX + (entitylivingbaseIn.chasingPosX - entitylivingbaseIn.prevChasingPosX) * (double)partialTicks - (entitylivingbaseIn.prevPosX + (entitylivingbaseIn.posX - entitylivingbaseIn.prevPosX) * (double)partialTicks);
+ double d1 = entitylivingbaseIn.prevChasingPosY + (entitylivingbaseIn.chasingPosY - entitylivingbaseIn.prevChasingPosY) * (double)partialTicks - (entitylivingbaseIn.prevPosY + (entitylivingbaseIn.posY - entitylivingbaseIn.prevPosY) * (double)partialTicks);
+ double d2 = entitylivingbaseIn.prevChasingPosZ + (entitylivingbaseIn.chasingPosZ - entitylivingbaseIn.prevChasingPosZ) * (double)partialTicks - (entitylivingbaseIn.prevPosZ + (entitylivingbaseIn.posZ - entitylivingbaseIn.prevPosZ) * (double)partialTicks);
+ float f = entitylivingbaseIn.prevRenderYawOffset + (entitylivingbaseIn.renderYawOffset - entitylivingbaseIn.prevRenderYawOffset) * partialTicks;
+ double d3 = (double)MathHelper.sin(f * (float)Math.PI / 180.0F);
+ double d4 = (double)(-MathHelper.cos(f * (float)Math.PI / 180.0F));
+ float f1 = (float)d1 * 10.0F;
+ f1 = MathHelper.clamp_float(f1, -6.0F, 32.0F);
+ float f2 = (float)(d0 * d3 + d2 * d4) * 100.0F;
+ float f3 = (float)(d0 * d4 - d2 * d3) * 100.0F;
+
+ if (f2 < 0.0F)
+ {
+ f2 = 0.0F;
+ }
+
+ if (f2 > 165.0F)
+ {
+ f2 = 165.0F;
+ }
+
+ float f4 = entitylivingbaseIn.prevCameraYaw + (entitylivingbaseIn.cameraYaw - entitylivingbaseIn.prevCameraYaw) * partialTicks;
+ f1 = f1 + MathHelper.sin((entitylivingbaseIn.prevDistanceWalkedModified + (entitylivingbaseIn.distanceWalkedModified - entitylivingbaseIn.prevDistanceWalkedModified) * partialTicks) * 6.0F) * 32.0F * f4;
+
+ if (entitylivingbaseIn.isSneaking())
+ {
+ f1 += 25.0F;
+ GlStateManager.translate(0.0F, 0.142F, -0.0178F);
+ }
+
+ GlStateManager.rotate(6.0F + f2 / 2.0F + f1, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(f3 / 2.0F, 0.0F, 0.0F, 1.0F);
+ GlStateManager.rotate(-f3 / 2.0F, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F);
+ this.playerRenderer.getMainModel().renderCape(0.0625F);
+ GlStateManager.popMatrix();
+ }
+ }
+
+ public boolean shouldCombineTextures()
+ {
+ return false;
+ }
+
+ public void doRenderLayer(EntityLivingBase entitylivingbaseIn, float p_177141_2_, float p_177141_3_, float partialTicks, float p_177141_5_, float p_177141_6_, float p_177141_7_, float scale)
+ {
+ this.doRenderLayer((AbstractClientPlayer)entitylivingbaseIn, p_177141_2_, p_177141_3_, partialTicks, p_177141_5_, p_177141_6_, p_177141_7_, scale);
+ }
+}
diff --git a/src/LayerCapeidk.java b/src/LayerCapeidk.java
new file mode 100644
index 0000000..ccf412e
--- /dev/null
+++ b/src/LayerCapeidk.java
@@ -0,0 +1,255 @@
+
+
+import animeware.cosmetic.CapeChecker;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.client.renderer.entity.layers.LayerRenderer;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EnumPlayerModelParts;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+
+public class LayerCape implements LayerRenderer
+{
+ private final RenderPlayer playerRenderer;
+ private static final String __OBFID = "CL_00002425";
+
+ public LayerCape(RenderPlayer playerRendererIn)
+ {
+ this.playerRenderer = playerRendererIn;
+ }
+
+ public void doRenderLayer(AbstractClientPlayer entitylivingbaseIn, float p_177141_2_, float p_177141_3_, float partialTicks, float p_177141_5_, float p_177141_6_, float p_177141_7_, float scale)
+ {
+ if (entitylivingbaseIn.hasPlayerInfo() && !entitylivingbaseIn.isInvisible() && entitylivingbaseIn.isWearing(EnumPlayerModelParts.CAPE) && CapeChecker.ownsOwnerCape(entitylivingbaseIn))
+ {
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/ownercape.png"));
+ GlStateManager.pushMatrix();
+ GlStateManager.translate(0.0F, 0.0F, 0.125F);
+ double d0 = entitylivingbaseIn.prevChasingPosX + (entitylivingbaseIn.chasingPosX - entitylivingbaseIn.prevChasingPosX) * (double)partialTicks - (entitylivingbaseIn.prevPosX + (entitylivingbaseIn.posX - entitylivingbaseIn.prevPosX) * (double)partialTicks);
+ double d1 = entitylivingbaseIn.prevChasingPosY + (entitylivingbaseIn.chasingPosY - entitylivingbaseIn.prevChasingPosY) * (double)partialTicks - (entitylivingbaseIn.prevPosY + (entitylivingbaseIn.posY - entitylivingbaseIn.prevPosY) * (double)partialTicks);
+ double d2 = entitylivingbaseIn.prevChasingPosZ + (entitylivingbaseIn.chasingPosZ - entitylivingbaseIn.prevChasingPosZ) * (double)partialTicks - (entitylivingbaseIn.prevPosZ + (entitylivingbaseIn.posZ - entitylivingbaseIn.prevPosZ) * (double)partialTicks);
+ float f = entitylivingbaseIn.prevRenderYawOffset + (entitylivingbaseIn.renderYawOffset - entitylivingbaseIn.prevRenderYawOffset) * partialTicks;
+ double d3 = (double)MathHelper.sin(f * (float)Math.PI / 180.0F);
+ double d4 = (double)(-MathHelper.cos(f * (float)Math.PI / 180.0F));
+ float f1 = (float)d1 * 10.0F;
+ f1 = MathHelper.clamp_float(f1, -6.0F, 32.0F);
+ float f2 = (float)(d0 * d3 + d2 * d4) * 100.0F;
+ float f3 = (float)(d0 * d4 - d2 * d3) * 100.0F;
+
+ if (f2 < 0.0F)
+ {
+ f2 = 0.0F;
+ }
+
+ if (f2 > 165.0F)
+ {
+ f2 = 165.0F;
+ }
+
+ float f4 = entitylivingbaseIn.prevCameraYaw + (entitylivingbaseIn.cameraYaw - entitylivingbaseIn.prevCameraYaw) * partialTicks;
+ f1 = f1 + MathHelper.sin((entitylivingbaseIn.prevDistanceWalkedModified + (entitylivingbaseIn.distanceWalkedModified - entitylivingbaseIn.prevDistanceWalkedModified) * partialTicks) * 6.0F) * 32.0F * f4;
+
+ if (entitylivingbaseIn.isSneaking())
+ {
+ f1 += 25.0F;
+ GlStateManager.translate(0.0F, 0.142F, -0.0178F);
+ }
+
+ GlStateManager.rotate(6.0F + f2 / 2.0F + f1, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(f3 / 2.0F, 0.0F, 0.0F, 1.0F);
+ GlStateManager.rotate(-f3 / 2.0F, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F);
+ this.playerRenderer.getMainModel().renderCape(0.0625F);
+ GlStateManager.popMatrix();
+ }
+
+ else if (entitylivingbaseIn.hasPlayerInfo() && !entitylivingbaseIn.isInvisible() && entitylivingbaseIn.isWearing(EnumPlayerModelParts.CAPE) && CapeChecker.ownsYtCape(entitylivingbaseIn))
+ {
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/yt.png"));
+ GlStateManager.pushMatrix();
+ GlStateManager.translate(0.0F, 0.0F, 0.125F);
+ double d0 = entitylivingbaseIn.prevChasingPosX + (entitylivingbaseIn.chasingPosX - entitylivingbaseIn.prevChasingPosX) * (double)partialTicks - (entitylivingbaseIn.prevPosX + (entitylivingbaseIn.posX - entitylivingbaseIn.prevPosX) * (double)partialTicks);
+ double d1 = entitylivingbaseIn.prevChasingPosY + (entitylivingbaseIn.chasingPosY - entitylivingbaseIn.prevChasingPosY) * (double)partialTicks - (entitylivingbaseIn.prevPosY + (entitylivingbaseIn.posY - entitylivingbaseIn.prevPosY) * (double)partialTicks);
+ double d2 = entitylivingbaseIn.prevChasingPosZ + (entitylivingbaseIn.chasingPosZ - entitylivingbaseIn.prevChasingPosZ) * (double)partialTicks - (entitylivingbaseIn.prevPosZ + (entitylivingbaseIn.posZ - entitylivingbaseIn.prevPosZ) * (double)partialTicks);
+ float f = entitylivingbaseIn.prevRenderYawOffset + (entitylivingbaseIn.renderYawOffset - entitylivingbaseIn.prevRenderYawOffset) * partialTicks;
+ double d3 = (double)MathHelper.sin(f * (float)Math.PI / 180.0F);
+ double d4 = (double)(-MathHelper.cos(f * (float)Math.PI / 180.0F));
+ float f1 = (float)d1 * 10.0F;
+ f1 = MathHelper.clamp_float(f1, -6.0F, 32.0F);
+ float f2 = (float)(d0 * d3 + d2 * d4) * 100.0F;
+ float f3 = (float)(d0 * d4 - d2 * d3) * 100.0F;
+
+ if (f2 < 0.0F)
+ {
+ f2 = 0.0F;
+ }
+
+ if (f2 > 165.0F)
+ {
+ f2 = 165.0F;
+ }
+
+ float f4 = entitylivingbaseIn.prevCameraYaw + (entitylivingbaseIn.cameraYaw - entitylivingbaseIn.prevCameraYaw) * partialTicks;
+ f1 = f1 + MathHelper.sin((entitylivingbaseIn.prevDistanceWalkedModified + (entitylivingbaseIn.distanceWalkedModified - entitylivingbaseIn.prevDistanceWalkedModified) * partialTicks) * 6.0F) * 32.0F * f4;
+
+ if (entitylivingbaseIn.isSneaking())
+ {
+ f1 += 25.0F;
+ GlStateManager.translate(0.0F, 0.142F, -0.0178F);
+ }
+
+ GlStateManager.rotate(6.0F + f2 / 2.0F + f1, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(f3 / 2.0F, 0.0F, 0.0F, 1.0F);
+ GlStateManager.rotate(-f3 / 2.0F, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F);
+ this.playerRenderer.getMainModel().renderCape(0.0625F);
+ GlStateManager.popMatrix();
+ }
+
+ else if (entitylivingbaseIn.hasPlayerInfo() && !entitylivingbaseIn.isInvisible() && entitylivingbaseIn.isWearing(EnumPlayerModelParts.CAPE) && CapeChecker.ownsQuickCape(entitylivingbaseIn))
+ {
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/quick.png"));
+ GlStateManager.pushMatrix();
+ GlStateManager.translate(0.0F, 0.0F, 0.125F);
+ double d0 = entitylivingbaseIn.prevChasingPosX + (entitylivingbaseIn.chasingPosX - entitylivingbaseIn.prevChasingPosX) * (double)partialTicks - (entitylivingbaseIn.prevPosX + (entitylivingbaseIn.posX - entitylivingbaseIn.prevPosX) * (double)partialTicks);
+ double d1 = entitylivingbaseIn.prevChasingPosY + (entitylivingbaseIn.chasingPosY - entitylivingbaseIn.prevChasingPosY) * (double)partialTicks - (entitylivingbaseIn.prevPosY + (entitylivingbaseIn.posY - entitylivingbaseIn.prevPosY) * (double)partialTicks);
+ double d2 = entitylivingbaseIn.prevChasingPosZ + (entitylivingbaseIn.chasingPosZ - entitylivingbaseIn.prevChasingPosZ) * (double)partialTicks - (entitylivingbaseIn.prevPosZ + (entitylivingbaseIn.posZ - entitylivingbaseIn.prevPosZ) * (double)partialTicks);
+ float f = entitylivingbaseIn.prevRenderYawOffset + (entitylivingbaseIn.renderYawOffset - entitylivingbaseIn.prevRenderYawOffset) * partialTicks;
+ double d3 = (double)MathHelper.sin(f * (float)Math.PI / 180.0F);
+ double d4 = (double)(-MathHelper.cos(f * (float)Math.PI / 180.0F));
+ float f1 = (float)d1 * 10.0F;
+ f1 = MathHelper.clamp_float(f1, -6.0F, 32.0F);
+ float f2 = (float)(d0 * d3 + d2 * d4) * 100.0F;
+ float f3 = (float)(d0 * d4 - d2 * d3) * 100.0F;
+
+ if (f2 < 0.0F)
+ {
+ f2 = 0.0F;
+ }
+
+ if (f2 > 165.0F)
+ {
+ f2 = 165.0F;
+ }
+
+ float f4 = entitylivingbaseIn.prevCameraYaw + (entitylivingbaseIn.cameraYaw - entitylivingbaseIn.prevCameraYaw) * partialTicks;
+ f1 = f1 + MathHelper.sin((entitylivingbaseIn.prevDistanceWalkedModified + (entitylivingbaseIn.distanceWalkedModified - entitylivingbaseIn.prevDistanceWalkedModified) * partialTicks) * 6.0F) * 32.0F * f4;
+
+ if (entitylivingbaseIn.isSneaking())
+ {
+ f1 += 25.0F;
+ GlStateManager.translate(0.0F, 0.142F, -0.0178F);
+ }
+
+ GlStateManager.rotate(6.0F + f2 / 2.0F + f1, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(f3 / 2.0F, 0.0F, 0.0F, 1.0F);
+ GlStateManager.rotate(-f3 / 2.0F, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F);
+ this.playerRenderer.getMainModel().renderCape(0.0625F);
+ GlStateManager.popMatrix();
+ }
+
+ else if (entitylivingbaseIn.hasPlayerInfo() && !entitylivingbaseIn.isInvisible() && entitylivingbaseIn.isWearing(EnumPlayerModelParts.CAPE) && CapeChecker.ownsDevCape(entitylivingbaseIn))
+ {
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/devcape.png"));
+ GlStateManager.pushMatrix();
+ GlStateManager.translate(0.0F, 0.0F, 0.125F);
+ double d0 = entitylivingbaseIn.prevChasingPosX + (entitylivingbaseIn.chasingPosX - entitylivingbaseIn.prevChasingPosX) * (double)partialTicks - (entitylivingbaseIn.prevPosX + (entitylivingbaseIn.posX - entitylivingbaseIn.prevPosX) * (double)partialTicks);
+ double d1 = entitylivingbaseIn.prevChasingPosY + (entitylivingbaseIn.chasingPosY - entitylivingbaseIn.prevChasingPosY) * (double)partialTicks - (entitylivingbaseIn.prevPosY + (entitylivingbaseIn.posY - entitylivingbaseIn.prevPosY) * (double)partialTicks);
+ double d2 = entitylivingbaseIn.prevChasingPosZ + (entitylivingbaseIn.chasingPosZ - entitylivingbaseIn.prevChasingPosZ) * (double)partialTicks - (entitylivingbaseIn.prevPosZ + (entitylivingbaseIn.posZ - entitylivingbaseIn.prevPosZ) * (double)partialTicks);
+ float f = entitylivingbaseIn.prevRenderYawOffset + (entitylivingbaseIn.renderYawOffset - entitylivingbaseIn.prevRenderYawOffset) * partialTicks;
+ double d3 = (double)MathHelper.sin(f * (float)Math.PI / 180.0F);
+ double d4 = (double)(-MathHelper.cos(f * (float)Math.PI / 180.0F));
+ float f1 = (float)d1 * 10.0F;
+ f1 = MathHelper.clamp_float(f1, -6.0F, 32.0F);
+ float f2 = (float)(d0 * d3 + d2 * d4) * 100.0F;
+ float f3 = (float)(d0 * d4 - d2 * d3) * 100.0F;
+
+ if (f2 < 0.0F)
+ {
+ f2 = 0.0F;
+ }
+
+ if (f2 > 165.0F)
+ {
+ f2 = 165.0F;
+ }
+
+ float f4 = entitylivingbaseIn.prevCameraYaw + (entitylivingbaseIn.cameraYaw - entitylivingbaseIn.prevCameraYaw) * partialTicks;
+ f1 = f1 + MathHelper.sin((entitylivingbaseIn.prevDistanceWalkedModified + (entitylivingbaseIn.distanceWalkedModified - entitylivingbaseIn.prevDistanceWalkedModified) * partialTicks) * 6.0F) * 32.0F * f4;
+
+ if (entitylivingbaseIn.isSneaking())
+ {
+ f1 += 25.0F;
+ GlStateManager.translate(0.0F, 0.142F, -0.0178F);
+ }
+
+ GlStateManager.rotate(6.0F + f2 / 2.0F + f1, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(f3 / 2.0F, 0.0F, 0.0F, 1.0F);
+ GlStateManager.rotate(-f3 / 2.0F, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F);
+ this.playerRenderer.getMainModel().renderCape(0.0625F);
+ GlStateManager.popMatrix();
+ }
+
+ else if (entitylivingbaseIn.hasPlayerInfo() && !entitylivingbaseIn.isInvisible() && entitylivingbaseIn.isWearing(EnumPlayerModelParts.CAPE) && CapeChecker.ownsZeroTwoCape(entitylivingbaseIn))
+ {
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/cape.png"));
+ GlStateManager.pushMatrix();
+ GlStateManager.translate(0.0F, 0.0F, 0.125F);
+ double d0 = entitylivingbaseIn.prevChasingPosX + (entitylivingbaseIn.chasingPosX - entitylivingbaseIn.prevChasingPosX) * (double)partialTicks - (entitylivingbaseIn.prevPosX + (entitylivingbaseIn.posX - entitylivingbaseIn.prevPosX) * (double)partialTicks);
+ double d1 = entitylivingbaseIn.prevChasingPosY + (entitylivingbaseIn.chasingPosY - entitylivingbaseIn.prevChasingPosY) * (double)partialTicks - (entitylivingbaseIn.prevPosY + (entitylivingbaseIn.posY - entitylivingbaseIn.prevPosY) * (double)partialTicks);
+ double d2 = entitylivingbaseIn.prevChasingPosZ + (entitylivingbaseIn.chasingPosZ - entitylivingbaseIn.prevChasingPosZ) * (double)partialTicks - (entitylivingbaseIn.prevPosZ + (entitylivingbaseIn.posZ - entitylivingbaseIn.prevPosZ) * (double)partialTicks);
+ float f = entitylivingbaseIn.prevRenderYawOffset + (entitylivingbaseIn.renderYawOffset - entitylivingbaseIn.prevRenderYawOffset) * partialTicks;
+ double d3 = (double)MathHelper.sin(f * (float)Math.PI / 180.0F);
+ double d4 = (double)(-MathHelper.cos(f * (float)Math.PI / 180.0F));
+ float f1 = (float)d1 * 10.0F;
+ f1 = MathHelper.clamp_float(f1, -6.0F, 32.0F);
+ float f2 = (float)(d0 * d3 + d2 * d4) * 100.0F;
+ float f3 = (float)(d0 * d4 - d2 * d3) * 100.0F;
+
+ if (f2 < 0.0F)
+ {
+ f2 = 0.0F;
+ }
+
+ if (f2 > 165.0F)
+ {
+ f2 = 165.0F;
+ }
+
+ float f4 = entitylivingbaseIn.prevCameraYaw + (entitylivingbaseIn.cameraYaw - entitylivingbaseIn.prevCameraYaw) * partialTicks;
+ f1 = f1 + MathHelper.sin((entitylivingbaseIn.prevDistanceWalkedModified + (entitylivingbaseIn.distanceWalkedModified - entitylivingbaseIn.prevDistanceWalkedModified) * partialTicks) * 6.0F) * 32.0F * f4;
+
+ if (entitylivingbaseIn.isSneaking())
+ {
+ f1 += 25.0F;
+ GlStateManager.translate(0.0F, 0.142F, -0.0178F);
+ }
+
+ GlStateManager.rotate(6.0F + f2 / 2.0F + f1, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(f3 / 2.0F, 0.0F, 0.0F, 1.0F);
+ GlStateManager.rotate(-f3 / 2.0F, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F);
+ this.playerRenderer.getMainModel().renderCape(0.0625F);
+ GlStateManager.popMatrix();
+ }
+ }
+
+ public boolean shouldCombineTextures()
+ {
+ return false;
+ }
+
+ public void doRenderLayer(EntityLivingBase entitylivingbaseIn, float p_177141_2_, float p_177141_3_, float partialTicks, float p_177141_5_, float p_177141_6_, float p_177141_7_, float scale)
+ {
+ this.doRenderLayer((AbstractClientPlayer)entitylivingbaseIn, p_177141_2_, p_177141_3_, partialTicks, p_177141_5_, p_177141_6_, p_177141_7_, scale);
+ }
+}
diff --git a/src/RenderTNTPrimed.java b/src/RenderTNTPrimed.java
new file mode 100644
index 0000000..e330d65
--- /dev/null
+++ b/src/RenderTNTPrimed.java
@@ -0,0 +1,77 @@
+package net.minecraft.client.renderer.entity;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.BlockRendererDispatcher;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.texture.TextureMap;
+import net.minecraft.entity.item.EntityTNTPrimed;
+import net.minecraft.init.Blocks;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+
+public class RenderTNTPrimed extends Render
+{
+ public RenderTNTPrimed(RenderManager renderManagerIn)
+ {
+ super(renderManagerIn);
+ this.shadowSize = 0.5F;
+ }
+
+ /**
+ * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then
+ * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic
+ * (Render) and this method has signature public void doRender(T entity, double d, double d1,
+ * double d2, float f, float f1). But JAD is pre 1.5 so doe
+ */
+ public void doRender(EntityTNTPrimed entity, double x, double y, double z, float entityYaw, float partialTicks)
+ {
+ BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher();
+ GlStateManager.pushMatrix();
+ GlStateManager.translate((float)x, (float)y + 0.5F, (float)z);
+
+ if ((float)entity.fuse - partialTicks + 1.0F < 10.0F)
+ {
+ float f = 1.0F - ((float)entity.fuse - partialTicks + 1.0F) / 10.0F;
+ f = MathHelper.clamp_float(f, 0.0F, 1.0F);
+ f = f * f;
+ f = f * f;
+ float f1 = 1.0F + f * 0.3F;
+ GlStateManager.scale(f1, f1, f1);
+ }
+
+ float f2 = (1.0F - ((float)entity.fuse - partialTicks + 1.0F) / 100.0F) * 0.8F;
+ this.bindEntityTexture(entity);
+ GlStateManager.translate(-0.5F, -0.5F, 0.5F);
+ blockrendererdispatcher.renderBlockBrightness(Blocks.tnt.getDefaultState(), entity.getBrightness(partialTicks));
+ GlStateManager.translate(0.0F, 0.0F, 1.0F);
+
+ if (entity.fuse / 5 % 2 == 0)
+ {
+ GlStateManager.disableTexture2D();
+ GlStateManager.disableLighting();
+ GlStateManager.enableBlend();
+ GlStateManager.blendFunc(770, 772);
+ GlStateManager.color(1.0F, 1.0F, 1.0F, f2);
+ GlStateManager.doPolygonOffset(-3.0F, -3.0F);
+ GlStateManager.enablePolygonOffset();
+ blockrendererdispatcher.renderBlockBrightness(Blocks.tnt.getDefaultState(), 1.0F);
+ GlStateManager.doPolygonOffset(0.0F, 0.0F);
+ GlStateManager.disablePolygonOffset();
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ GlStateManager.disableBlend();
+ GlStateManager.enableLighting();
+ GlStateManager.enableTexture2D();
+ }
+
+ GlStateManager.popMatrix();
+ super.doRender(entity, x, y, z, entityYaw, partialTicks);
+ }
+
+ /**
+ * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture.
+ */
+ protected ResourceLocation getEntityTexture(EntityTNTPrimed entity)
+ {
+ return TextureMap.locationBlocksTexture;
+ }
+}
diff --git a/src/animewarenoassets.zip b/src/animewarenoassets.zip
new file mode 100644
index 0000000..6a80dc4
Binary files /dev/null and b/src/animewarenoassets.zip differ
diff --git a/src/dis app id.txt b/src/dis app id.txt
new file mode 100644
index 0000000..21afdf6
--- /dev/null
+++ b/src/dis app id.txt
@@ -0,0 +1 @@
+906999474130391040
\ No newline at end of file
diff --git a/src/minecraft/Start.bat b/src/minecraft/Start.bat
new file mode 100644
index 0000000..ae0025f
--- /dev/null
+++ b/src/minecraft/Start.bat
@@ -0,0 +1,20 @@
+import java.io.File;
+import java.lang.reflect.Field;
+import java.util.Arrays;
+
+import net.minecraft.client.main.Main;
+
+public class Start
+{
+ public static void main(String[] args)
+ {
+ Main.main(concat(new String[] {"--version", "mcp", "--accessToken", "0", "--assetsDir", "assets", "--assetIndex", "1.8", "--userProperties", "{}"}, args));
+ }
+
+ public static T[] concat(T[] first, T[] second)
+ {
+ T[] result = Arrays.copyOf(first, first.length + second.length);
+ System.arraycopy(second, 0, result, first.length, second.length);
+ return result;
+ }
+}
diff --git a/src/minecraft/Start.java b/src/minecraft/Start.java
new file mode 100644
index 0000000..ae0025f
--- /dev/null
+++ b/src/minecraft/Start.java
@@ -0,0 +1,20 @@
+import java.io.File;
+import java.lang.reflect.Field;
+import java.util.Arrays;
+
+import net.minecraft.client.main.Main;
+
+public class Start
+{
+ public static void main(String[] args)
+ {
+ Main.main(concat(new String[] {"--version", "mcp", "--accessToken", "0", "--assetsDir", "assets", "--assetIndex", "1.8", "--userProperties", "{}"}, args));
+ }
+
+ public static T[] concat(T[] first, T[] second)
+ {
+ T[] result = Arrays.copyOf(first, first.length + second.length);
+ System.arraycopy(second, 0, result, first.length, second.length);
+ return result;
+ }
+}
diff --git a/src/minecraft/animeware/DiscordRP.java b/src/minecraft/animeware/DiscordRP.java
new file mode 100644
index 0000000..8460fb1
--- /dev/null
+++ b/src/minecraft/animeware/DiscordRP.java
@@ -0,0 +1,102 @@
+package animeware;
+
+import org.lwjgl.opengl.APPLEYcbcr422;
+
+import com.mojang.authlib.GameProfile;
+
+import animeware.util.lukflug.Toggleable;
+import net.arikia.dev.drpc.DiscordEventHandlers;
+import net.arikia.dev.drpc.DiscordRPC;
+import net.arikia.dev.drpc.DiscordRichPresence;
+import net.arikia.dev.drpc.DiscordUser;
+import net.arikia.dev.drpc.callbacks.ReadyCallback;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.entity.player.EntityPlayer;
+
+public class DiscordRP {
+
+ private boolean running = true;
+ private long created = 0;
+ private final GameProfile gameProfile = null;
+
+ public static String id;
+ public static String idOwner = "Hypnomacka#4765";
+
+ public void start( ) {
+
+ this.created = System.currentTimeMillis();
+
+ DiscordEventHandlers handlers = new DiscordEventHandlers.Builder().setReadyEventHandler(new ReadyCallback() {
+
+
+
+ @Override
+ public void apply(DiscordUser user) {
+ DiscordRP.id = user.username + "#" + user.discriminator;
+
+ System.out.println("id = " + user.username + "#" + user.discriminator + " - " + (Minecraft.getMinecraft().getSession().getUsername()));
+ if(user.username != "null") {
+ NightSky.DisName = user.username;
+ } else {
+ NightSky.DisName = NightSky.mcname;
+ }
+ if(user.discriminator != "") {
+ NightSky.DisTag = "#" + user.discriminator;
+ } else {
+ NightSky.DisTag = "#0000";
+ }
+ //System.out.println("-_-");
+ update("Starting", "");
+ }
+
+ }).build();
+
+ DiscordRPC.discordInitialize("934484321417445437", handlers, true);
+
+ new Thread("DRPC Callback") {
+
+ @Override
+ public void run() {
+
+ while(running) {
+ DiscordRPC.discordRunCallbacks();
+ //PanelManager.showComponent();
+ }
+
+ }
+
+ }.start();
+
+ }
+ public void shutdown() {
+ running = false;
+ DiscordRPC.discordShutdown();
+
+ }
+ private String getImager() {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals("hypnomacka")) {
+ return "owner";
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("KnownAsR3named")) {
+ return "staff";
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("_Marto__")) {
+ return "yt";
+ } else {
+ return "large";
+ }
+ }
+ public void update(String firstLine, String secondLine) {
+ DiscordRichPresence.Builder b = new DiscordRichPresence.Builder(secondLine);
+
+ b.setBigImage("large", "");
+ b.setDetails(firstLine);
+ b.setStartTimestamps(created);
+
+ DiscordRPC.discordUpdatePresence(b.build());
+ }
+ public static String getDiscordName(DiscordUser user) {
+
+ return user.username + "#" + user.discriminator;
+
+ }
+}
diff --git a/src/minecraft/animeware/NightSky.java b/src/minecraft/animeware/NightSky.java
new file mode 100644
index 0000000..1fd82f6
--- /dev/null
+++ b/src/minecraft/animeware/NightSky.java
@@ -0,0 +1,308 @@
+
+/*
+ * This client was created by Hypnomacka using QickDaffys tutorials as base and snippets of code from his discord server
+ */
+
+package animeware;
+
+import java.awt.Color;
+import java.util.ArrayList;
+
+import org.lwjgl.LWJGLException;
+import org.lwjgl.opengl.Display;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticController;
+import animeware.cosmetic.CosmeticManager;
+import animeware.cosmetic.impl.Cape;
+import animeware.event.Event;
+import animeware.event.EventManager;
+import animeware.event.EventTarget;
+import animeware.event.impl.ClientTick;
+import animeware.event.impl.EventUpdate;
+import animeware.gui.alt.AltManager;
+import animeware.gui.clickgui.ClickGUI;
+import animeware.gui.clickgui.GUIType;
+import animeware.hud.mod.Freelook;
+import animeware.hud.mod.HudManager;
+import animeware.hud.mod.HudMod;
+import animeware.login.Users;
+import animeware.ui.themes.impl.ThemeManager;
+import animeware.util.account.Account;
+import animeware.util.backend.AntiCheat;
+import animeware.util.config.AccountConfig;
+import animeware.util.config.Config;
+import animeware.util.config.SaveLoad;
+import animeware.util.cosmetic.AnimUtil;
+import animeware.util.font.FontUtil;
+import animeware.util.notification.Notification;
+import animeware.util.notification.NotificationManager;
+import animeware.util.websockets.user.CheckName;
+import net.minecraft.client.Minecraft;
+import net.minecraft.util.ChatComponentText;
+
+public class NightSky {
+
+ //public static boolean SwordAnim = false;
+ public String NAME = "NightSky", VERSION = "(b-5.0Nn-Cg/master)", AUTHOR = "hypnomacka", NAMEVER = NAME + " " + VERSION, VERSIONSIMPLE = "5.0";
+ public static NightSky INSTANCE = new NightSky();
+ public Minecraft mc = Minecraft.getMinecraft();
+ public static String mcname = Minecraft.getMinecraft().getSession().getUsername();
+ private DiscordRP discordRP = new DiscordRP();
+ public static String DisName;
+ public static String DisTag;
+ //public Configuration config, configSaving = ConfigurationAPI.newConfiguration(new File("/test.aw"));
+ private HudMod m;
+ private Event e;
+
+ boolean cracked = false;
+
+
+ public static boolean isUser;
+
+ private int previousF5 = 0;
+
+ private final AccountConfig accountConfig = new AccountConfig();
+
+ public EventManager eventManager;
+ public Config config;
+ //public AccountConfig accConfig;
+ public HudManager hudManager;
+ public AltManager altManager;
+ public Users users;
+ public CosmeticController cosmeticController;
+ public Cape cape;
+ public Notification notif;
+ public CosmeticManager cosManager;
+ public ThemeManager themeManager;
+ //public Setting setting;
+ public NotificationManager manager;
+ public SaveLoad saveLoad;
+ //public Account acc;
+
+
+
+ //public static NetworkClient networkClient;
+ //public ParticleEngine particleEngine;
+ public static boolean hasSent;
+
+ public static boolean results;
+
+ public float cameraYaw = 0f;
+ public float cameraPitch = 0f;
+
+ //public static String encryptionString = "austinsexyforehead9VsTDGMOvDsEOByAZn9b6XFTE1hrPRUTDqQyy0NSCgbF2UVAKBTMCboHfUIOagja5FI3r5edsS9ek9dw";
+
+ public void startup() {
+
+
+ eventManager = new EventManager();
+ //config = new Config();
+
+ //accountConfig.load();
+ this.accountConfig.load();
+ config = new Config();
+
+ config.loadModConfig();
+
+ //accConfig = new AccountConfig();
+
+
+
+ hudManager = new HudManager();
+ altManager = new AltManager();
+ users = new Users();
+ cosmeticController = new CosmeticController();
+ cape = new Cape(null);
+ cosManager = new CosmeticManager();
+ themeManager = new ThemeManager();
+ //setting = new Setting();
+ manager = new NotificationManager();
+ saveLoad = new SaveLoad("nightsky");
+ //acc = new Account(mc.thePlayer.getName(), "", "aeef7bc935f9420eb6314dea7ad7e1e5", mc.thePlayer.getUniqueID().toString(), false);
+
+ this.INSTANCE.hudManager.WindowedFullscreen.onEnable();
+
+ //AltButton.name = mc.fontRendererObj.getStringWidth(mc.thePlayer.getGameProfile().getName());
+
+ //System.out.println(hudManager.hudMods);
+
+ if(AntiCheat.checkVape() == true) {
+ Booleans.ban = true;
+
+ }
+ //this.DisName = DiscordRP.getDiscordName(null);
+
+ ClickGUI.ownerCheck();
+
+ NightSky.INSTANCE.getDiscordRP().update("Starting...", NAME + " " + VERSION);
+
+
+
+ discordRP.start();
+
+ System.out.println("Starting... " + NAMEVER + " by " + AUTHOR);
+
+
+ Display.setTitle(NAMEVER);
+
+ FontUtil.bootstrap();
+
+ //SessionChanger.getInstance().setUserOffline("hypnomacka");
+
+ eventManager.register(this);
+
+
+
+ }
+
+ public static ArrayList accountManager = new ArrayList<>();
+
+ public void addAccount(Account account) {
+ for (Account acc : accountManager) {
+ if (acc.getUsername().equals(account.getUsername())) {
+ System.out.println("Account with username " + account.getUsername() + " already exists!");
+ return;
+ }
+ }
+ accountManager.add(account);
+ }
+
+ public String getNameString() {
+ return mc.thePlayer.getName().toString();
+ }
+
+ public void shutdown() {
+ this.accountConfig.save();
+ config.saveModConfig();
+ //accountConfig.save();
+ System.out.println("Shutting down " + NAMEVER);
+
+ discordRP.shutdown();
+
+ //SaveLoad.save
+
+ CheckName.DoShutDownCheck();
+
+
+
+ eventManager.unregister(this);
+ }
+
+ private void init() throws LWJGLException {
+ /*if(mc.isFullScreen()) {
+ System.setProperty("org.lwjgl.opengl.Window.undecorated", "true");
+ Display.setDisplayMode(Display.getDesktopDisplayMode());
+ Display.setLocation(0, 0);
+ Display.setFullscreen(false);
+ Display.setResizable(false);
+ } else {
+ System.setProperty("org.lwjgl.opengl.Window.undecorated", "false");
+ Display.setDisplayMode(new DisplayMode(mc.displayWidth, mc.displayHeight));
+ Display.setResizable(true);
+ }*/
+
+ }
+ public final Color getClientColor() {
+ return new Color(236, 133, 209);
+ }
+
+ public final Color getAlternateClientColor() {
+ return new Color(28, 167, 222);
+ }
+
+
+ public float getCameraYaw()
+ {
+ return Freelook.freelooking ? cameraYaw : mc.thePlayer.rotationYaw;
+ }
+
+ public float getCameraPitch()
+ {
+ return Freelook.freelooking ? cameraPitch : mc.thePlayer.rotationPitch;
+ }
+ public boolean overrideMouse()
+ {
+ if (mc.inGameHasFocus && Display.isActive())
+ {
+ if (!Freelook.freelooking)
+ {
+ return true;
+ }
+
+ // CODE
+ mc.mouseHelper.mouseXYChange();
+ float f1 = mc.gameSettings.mouseSensitivity * 0.6F + 0.2F;
+ float f2 = f1 * f1 * f1 * 8.0F;
+ float f3 = (float) mc.mouseHelper.deltaX * f2;
+ float f4 = (float) mc.mouseHelper.deltaY * f2;
+
+ cameraYaw += f3 * 0.15F;
+ cameraPitch += f4 * 0.15F;
+
+ if (cameraPitch > 90) cameraPitch = 90;
+ if (cameraPitch < -90) cameraPitch = -90;
+ }
+
+ return false;
+ }
+
+ @EventTarget
+ public void onTick(ClientTick event) {
+ if(mc.gameSettings.CLICK_GUI.isPressed()) {
+ if(!(ClickGUI.type == GUIType.SETTINGS)) {
+ mc.displayGuiScreen(new ClickGUI());
+
+ } else {
+ ClickGUI.type = GUIType.THEME;
+ mc.displayGuiScreen(new ClickGUI());
+ }
+
+ }
+
+ }
+ public static final NightSky getInstance() {
+ return INSTANCE;
+ }
+ public Users getUsers() {
+ return users;
+ }
+ public void setUsers(Users users) {
+ this.users = users;
+ }
+ public DiscordRP getDiscordRP() {
+ return discordRP;
+ }
+
+ @EventTarget
+ private void onUpdate(EventUpdate e) {
+
+ AnimUtil.anim(e);
+ }
+ public static void sendMessage(String message) {
+ StringBuilder messageBuilder = new StringBuilder();
+
+ messageBuilder.append("&r<&bNightSky&r>").append("&r ");
+
+ messageBuilder.append(message);
+
+ Minecraft.getMinecraft().ingameGUI.getChatGUI().printChatMessage(new ChatComponentText(messageBuilder.toString().replace("&", "\247")));
+ }
+ public static Color getMainColor() {
+ return new Color(0, 150, 200, 255);
+ }
+ public static String rank() {
+ if(mcname.equals("hypnomacka")) {
+ return "bOwner";
+ } else if(mcname.equals("_Marto__")) {
+ return "5YouTube";
+ } else if(mcname.equals("KnownAsR3named")) {
+ return "4Staff";
+ } else {
+ return "User";
+ }
+
+
+ }
+
+}
diff --git a/src/minecraft/animeware/ServerDataFeatured.java b/src/minecraft/animeware/ServerDataFeatured.java
new file mode 100644
index 0000000..2ae8ecb
--- /dev/null
+++ b/src/minecraft/animeware/ServerDataFeatured.java
@@ -0,0 +1,14 @@
+package animeware;
+
+import net.minecraft.client.multiplayer.ServerData;
+import net.minecraft.util.ResourceLocation;
+
+public class ServerDataFeatured extends ServerData {
+
+ public static final ResourceLocation SERVER_ICON = new ResourceLocation("Animeware/icons/server.png");
+
+ public ServerDataFeatured(String serverName, String serverIP) {
+ super(serverName, serverIP, false);
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/Booleans.java b/src/minecraft/animeware/cosmetic/Booleans.java
new file mode 100644
index 0000000..12c1965
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/Booleans.java
@@ -0,0 +1,93 @@
+package animeware.cosmetic;
+
+public class Booleans {
+
+ public static boolean isOwner;
+ public static boolean evening;
+ public static boolean morning;
+ public static boolean Cape1;
+ public static boolean Cape;
+ public static boolean PlanetsCape;
+ public static boolean QuavCape;
+ public static boolean ReptyllCape;
+ public static boolean SwordCape;
+ public static boolean EmeraldCape;
+ public static boolean LCape;
+ public static boolean NitroCape;
+ public static boolean DarkCape;
+ public static boolean Sparkofyt;
+ public static boolean Sparkofyt2;
+ public static boolean CosmeticEasterEggs;
+ public static boolean Susanoo;
+ public static boolean CosmeticWitchHat;
+ public static boolean SkinChanger;
+ public static boolean CrystalWings;
+ public static boolean GradientBlack;
+ public static boolean GradientBlue;
+ public static boolean GradientGreen;
+ public static boolean GradientPurple;
+ public static boolean GradientRed;
+ public static boolean tanjirocape;
+ public static boolean kocho2cape;
+ public static boolean kocho3cape;
+ public static boolean dseyes2cape;
+ public static boolean dseyescape;
+ public static boolean wintercape;
+ public static boolean glasses;
+ public static boolean retardEyes;
+ public static boolean DevCape;
+ public static boolean QuickCape;
+ public static boolean OwnerCape;
+ public static boolean YTCape;
+ public static boolean CosmeticWings;
+ public static boolean GalaxyWings;
+ public static boolean Halo;
+ public static boolean TopHat;
+ public static boolean Blaze;
+ public static boolean Bandana;
+ public static boolean CreeperLightning;
+ public static boolean EnchantingGlint;
+ public static boolean Witherpet;
+ public static boolean ChinaHat;
+ public static boolean RinneCape;
+ public static boolean ModArmorStatus;
+ public static boolean SwordAnim;
+ public static boolean Hitbox;
+ public static boolean ModBossbar;
+ public static boolean TNTTimer;
+ public static boolean ScrollZoom;
+ public static boolean BlockOverlay;
+ public static boolean ToggleSprint;
+ public static boolean FPSMod;
+ public static boolean BlockOverlayPurple;
+ public static boolean BlockOverlayRed;
+ public static boolean BlockOverlayWhite;
+ public static boolean BlockOverlayBlue;
+ public static boolean BlockOverlayCyan;
+ public static boolean BlockOverlayChroma;
+ public static boolean random;
+ public static boolean direction;
+ public static boolean DynamicFOV;
+ public static boolean blur;
+ public static boolean itemphys;
+ public static boolean MoreParticles;
+ public static boolean SmallSword;
+ public static boolean SwordSpin;
+ public static boolean ban;
+ public static boolean watermark;
+ public static boolean night;
+ public static boolean day;
+ public static boolean timechanger;
+ public static boolean freelook;
+ public static boolean notification;
+ public static boolean nickhider;
+ public static boolean Winter;
+ public static boolean HitColor;
+ public static boolean HitColorRed;
+ public static boolean HitColorBlue;
+ public static boolean HitColorCyan;
+ public static boolean HitColorPurple;
+ public static boolean HitColorChroma;
+ public static boolean minimalBobbing;
+
+}
diff --git a/src/minecraft/animeware/cosmetic/Cosmetic.java b/src/minecraft/animeware/cosmetic/Cosmetic.java
new file mode 100644
index 0000000..b5b05f7
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/Cosmetic.java
@@ -0,0 +1,141 @@
+package animeware.cosmetic;
+
+import animeware.hud.Category;
+import animeware.util.lukflug.Toggleable;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.client.renderer.entity.layers.LayerRenderer;
+import net.minecraft.util.ResourceLocation;
+
+public abstract class Cosmetic implements LayerRenderer, Toggleable {
+
+ public static RenderPlayer playerRenderer;
+ public static Minecraft mc = Minecraft.getMinecraft();
+ //public static Cosmetic INSTANCE = new Cosmetic();
+
+ public static String name;
+ public static boolean cape;
+ public static boolean quavcape;
+ public boolean wearing;
+ public boolean owns;
+ public Category c;
+
+ public String location;
+
+ public boolean state;
+
+ public float prog = 0.0F, anim = 22.0F;
+
+ public float dragY;
+
+ public float dragX;
+
+
+
+ public Cosmetic(String name, String location) {
+ this.name = name;
+ this.location = location;
+ }
+
+ public void render(float ticks) {}
+
+ public void toggle() {
+ this.state = !this.state;
+ }
+
+ public void setLocation(String in) {
+ this.location = in;
+ }
+
+ public ResourceLocation getLocation() {
+ return new ResourceLocation(this.location);
+ }
+
+
+
+
+ public Cosmetic(String name, boolean cape, RenderPlayer playerRenderer) {
+ this.name = name;
+ this.cape = cape;
+ this.playerRenderer = playerRenderer;
+ }
+ public static RenderPlayer getPlayerRenderer() {
+ return playerRenderer;
+ }
+
+ public static Minecraft getMc() {
+ return mc;
+ }
+
+ public static String getName() {
+ return name;
+ }
+
+ public static boolean isCape() {
+ return cape;
+ }
+
+ public boolean isOwns() {
+ return owns;
+ }
+
+ public Category getC() {
+ return c;
+ }
+
+ public void setWearing(boolean newWearing) {
+ wearing = newWearing;
+ }
+
+ public boolean isWearing() {
+ return wearing;
+ }
+
+ public void toggleWearing() {
+ if(owns) {
+ wearing = !wearing;
+ }
+ }
+
+ public static boolean ownsCosmetic() {
+ return false;
+ }
+
+ /*@Override
+ public void toggle() {
+ if(owns) {
+ wearing = !wearing;
+ }
+
+ }*/
+
+ @Override
+ public boolean isOn() {
+ return wearing && owns;
+ }
+
+ @Override
+ public void doRenderLayer(AbstractClientPlayer player, float limbSwing, float limbSwingAmount,
+ float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) {
+
+ if(player.hasPlayerInfo() && !player.isInvisible()) {
+ render(player, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale);
+ }
+
+ }
+
+ public abstract void render(AbstractClientPlayer player, float limbSwing, float limbSwingAmount,
+ float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale);
+
+ @Override
+ public boolean shouldCombineTextures() {
+ return false;
+ }
+ public Category getCategory() {
+ return c;
+
+ }
+
+
+}
diff --git a/src/minecraft/animeware/cosmetic/CosmeticBase.java b/src/minecraft/animeware/cosmetic/CosmeticBase.java
new file mode 100644
index 0000000..e251cdb
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/CosmeticBase.java
@@ -0,0 +1,29 @@
+package animeware.cosmetic;
+
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.renderer.entity.layers.LayerRenderer;
+
+public abstract class CosmeticBase implements LayerRenderer
+{
+ protected final RenderPlayer renderPlayer;
+
+ public CosmeticBase(final RenderPlayer player) {
+ this.renderPlayer = player;
+ }
+
+ @Override
+ public void doRenderLayer(final AbstractClientPlayer player, final float limbSwing, final float limbSwingAmount, final float partialTicks, final float ageInTicks, final float headYaw, final float headPitch, final float scale) {
+ if (player.hasPlayerInfo() && !player.isInvisible()) {
+ this.render(player, limbSwing, limbSwingAmount, partialTicks, ageInTicks, headYaw, headPitch, scale);
+ }
+ }
+
+ @Override
+ public boolean shouldCombineTextures() {
+ return false;
+ }
+
+ public abstract void render(final AbstractClientPlayer p0, final float p1, final float p2, final float p3, final float p4, final float p5, final float p6, final float p7);
+}
diff --git a/src/minecraft/animeware/cosmetic/CosmeticChecker.java b/src/minecraft/animeware/cosmetic/CosmeticChecker.java
new file mode 100644
index 0000000..6695a54
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/CosmeticChecker.java
@@ -0,0 +1,301 @@
+package animeware.cosmetic;
+
+import animeware.NightSky;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+
+public class CosmeticChecker {
+
+ public static boolean ownsOwnerCape(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals("hypnomacka")) {
+ return true;
+ }
+
+
+
+
+ else return false;
+ }
+ public static boolean ownsYtCape(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals("hypnomacka")) {
+ return true;
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("_Marto__")) {
+ return true;
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("quickDaffy")) {
+ return true;
+ }
+
+
+
+
+ else return false;
+ }
+
+ public static boolean ownsQuickCape(AbstractClientPlayer entityln) {
+ /*if(Minecraft.getMinecraft().thePlayer.getName().equals("hypnomacka")) {
+ return true;
+ } else */if(Minecraft.getMinecraft().thePlayer.getName().equals("quickDaffy")) {
+ return true;
+ }
+
+
+
+
+ else return false;
+ }
+ public static boolean ownsDevCape(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals("hypnomacka")) {
+ return true;
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("abcdegh8")) {
+ return true;
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("KnownAsR3named")) {
+ return true;
+ }else if(Minecraft.getMinecraft().thePlayer.getName().equals("Slepica")) {
+ return true;
+ }
+
+
+
+
+ else return false;
+ }
+ public static boolean isDev(T entity) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals("hypnomacka")) {
+ return true;
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("abcdegh8")) {
+ return true;
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("KnownAsR3named")) {
+ return true;
+ }else if(Minecraft.getMinecraft().thePlayer.getName().equals("Slepica")) {
+ return true;
+ }
+
+
+
+
+ else return false;
+ }
+
+ public static boolean ownsZeroTwoCape(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals(NightSky.mcname)) {
+ return true;
+ }
+
+
+
+
+
+ else return false;
+ }
+ public static boolean ownsOzhayCape(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals(Minecraft.getMinecraft().getSession().getUsername())) {
+ return true;
+ }
+
+
+
+
+
+ else return false;
+ }
+ public static boolean ownsPlanetsCape(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals(Minecraft.getMinecraft().getSession().getUsername())) {
+ return true;
+ }
+
+
+
+
+
+ else return false;
+ }
+ public static boolean ownsQuavCape(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals(Minecraft.getMinecraft().getSession().getUsername())) {
+ return true;
+ }
+
+
+
+
+
+ else return false;
+ }
+ public static boolean ownsReptyllCape(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals(Minecraft.getMinecraft().getSession().getUsername())) {
+ return true;
+ }
+
+
+
+
+
+ else return false;
+ }
+ public static boolean ownsSwordCape(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals(Minecraft.getMinecraft().getSession().getUsername())) {
+ return true;
+ }
+
+
+
+
+
+ else return false;
+ }
+ public static boolean ownsEmeraldCape(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals(Minecraft.getMinecraft().getSession().getUsername())) {
+ return true;
+ }
+
+
+
+
+
+ else return false;
+ }
+ public static boolean ownsLCape(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals(Minecraft.getMinecraft().getSession().getUsername())) {
+ return true;
+ }
+
+
+
+
+
+ else return false;
+ }
+ public static boolean ownsNitroCape(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals(Minecraft.getMinecraft().getSession().getUsername())) {
+ return true;
+ }
+
+
+
+
+
+ else return false;
+ }
+ public static boolean ownsDarkCape(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals(Minecraft.getMinecraft().getSession().getUsername())) {
+ return true;
+ }
+
+
+
+
+
+ else return false;
+ }
+ public static boolean ownsWings(AbstractClientPlayer entityln) {
+ /*if(Minecraft.getMinecraft().thePlayer.getName().equals("hypnomacka")) {
+ return true;
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("quickDaffy")) {
+ return true;
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("KnownAsR3named")) {
+ return true;
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("MartoSVK")) {
+ return true;
+ }*/
+ if(Minecraft.getMinecraft().thePlayer.getName().equals(Minecraft.getMinecraft().getSession().getUsername())) {
+ return true;
+ }
+
+
+ else return false;
+ }
+ public static boolean ownsHat(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals("hypnomacka")) {
+ return true;
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("quickDaffy")) {
+ return true;
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("KnownAsR3named")) {
+ return true;
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("_Marto__")) {
+ return true;
+ }
+ if(Minecraft.getMinecraft().thePlayer.getName().equals(Minecraft.getMinecraft().getSession().getUsername())) {
+ return true;
+ }
+
+
+ else return false;
+ }
+ public static boolean ownsHalo(AbstractClientPlayer entityln) {
+ /*if(Minecraft.getMinecraft().thePlayer.getName().equals("hypnomacka")) {
+ return true;
+ } else */if(Minecraft.getMinecraft().thePlayer.getName().equals("_Marto__")) {
+ return true;
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("KnownAsR3named")) {
+ return true;
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("quickDaffy")) {
+ return true;
+ }
+ if(Minecraft.getMinecraft().thePlayer.getName().equals(Minecraft.getMinecraft().getSession().getUsername())) {
+ return true;
+ }
+
+
+
+
+ else return false;
+ }
+ public static boolean ownsBadge(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals(Minecraft.getMinecraft().getSession().getUsername())) {
+ return true;
+ }
+ else return false;
+ }
+ public static boolean ownsDevBadge(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals("KnownAsR3named")) {
+ return true;
+ }
+ if(Minecraft.getMinecraft().thePlayer.getName().equals("Slepica")) {
+ return true;
+ }
+ if(Minecraft.getMinecraft().thePlayer.getName().equals("abcdefgh8")) {
+ return true;
+ }
+ if(Minecraft.getMinecraft().thePlayer.getName().equals("quickDaffy")) {
+ return true;
+ }
+ else return false;
+ }
+ public static boolean ownsMartoBadge(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals("_Marto__")) {
+ return true;
+ }
+ else return false;
+ }
+ public static boolean ownsOwnerBadge(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals("hypnomacka")) {
+ return true;
+ }
+ else return false;
+ }
+ public static boolean ownsGalaxyWings(AbstractClientPlayer entityln) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals("hypnomacka")) {
+ return true;
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("_Marto__")) {
+ return true;
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("KnownAsR3named")) {
+ return true;
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("quickDaffy")) {
+ return true;
+ }
+
+
+
+
+
+ else return false;
+ }
+
+ public static float[] getTopHatColor(AbstractClientPlayer player) {
+ return new float[] {1, 1, 1};
+ }
+ public static float[] getHaloColor(AbstractClientPlayer player) {
+ return new float[] {0, 0, 1};
+ }
+
+
+}
diff --git a/src/minecraft/animeware/cosmetic/CosmeticController.java b/src/minecraft/animeware/cosmetic/CosmeticController.java
new file mode 100644
index 0000000..62a732e
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/CosmeticController.java
@@ -0,0 +1,78 @@
+package animeware.cosmetic;
+
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+
+import animeware.cosmetic.impl.TopHat;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+
+public class CosmeticController {
+
+ public Minecraft mc = Minecraft.getMinecraft();
+
+
+
+ public static boolean shouldRenderOwnerCape(AbstractClientPlayer player) {
+ //if(CosmeticManager.ownerCape.isWearing() && CosmeticManager.ownerCape.ownsCosmetic()) {
+ if(player.getName().equals("hypnomacka")) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ public static boolean shouldRenderQuickCape(AbstractClientPlayer player) {
+ //if(CosmeticManager.quickCape.isWearing() && CosmeticManager.quickCape.ownsCosmetic()) {
+ if(player.getName().equals("quickDaffy")) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ public static boolean shouldRenderYTCape(AbstractClientPlayer player) {
+ //if(CosmeticManager.ytCape.isWearing() && CosmeticManager.ytCape.ownsCosmetic()) {
+ if(player.getName().equals("_Marto__")) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ public static boolean shouldRenderDevCape(AbstractClientPlayer player) {
+ //if(CosmeticManager.devCape.isWearing() && CosmeticManager.devCape.ownsCosmetic()) {
+ if(player.getName().equals("KnownAsR3named")) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ public static boolean shouldZeroTwoCape(AbstractClientPlayer player) {
+ //if(CosmeticManager.cape.isWearing() && CosmeticManager.cape.ownsCosmetic()) {
+ if(player.getName().equals(Minecraft.getMinecraft().getSession().getUsername())) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ /*public static boolean shouldRenderWings(AbstractClientPlayer entitylivingbaseIn) {
+ return false;
+ }*/
+ public static boolean shouldRenderTopHat(AbstractClientPlayer player) {
+ //if(CosmeticManager.topHat.isWearing() && CosmeticManager.topHat.ownsCosmeticHat()) {
+ if(player.getName().equals("hypnomacka")) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ public static boolean shouldRenderHalo(AbstractClientPlayer player){
+ if(player.getName().equals("hypnomacka")) {
+ return true;
+ } else {
+ return false;
+ }
+
+ }
+ /*public static float[] getTopHatColor(AbstractClientPlayer player) {
+ return new float[] {1, 0, 0};
+ }*/
+}
diff --git a/src/minecraft/animeware/cosmetic/CosmeticManager.java b/src/minecraft/animeware/cosmetic/CosmeticManager.java
new file mode 100644
index 0000000..9da5b87
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/CosmeticManager.java
@@ -0,0 +1,158 @@
+package animeware.cosmetic;
+
+import java.util.ArrayList;
+
+import animeware.cosmetic.impl.ChinaHat;
+import animeware.cosmetic.impl.CosmeticCreeperLightning;
+import animeware.cosmetic.impl.CosmeticEnchantingGlint;
+import animeware.cosmetic.impl.CosmeticWitherpet;
+import animeware.cosmetic.impl.CosmeticMods.Bandana;
+import animeware.cosmetic.impl.CosmeticMods.Blaze;
+import animeware.cosmetic.impl.CosmeticMods.Cape;
+import animeware.cosmetic.impl.CosmeticMods.ChinaHatModule;
+import animeware.cosmetic.impl.CosmeticMods.CosmeticEasterEggs;
+import animeware.cosmetic.impl.CosmeticMods.CosmeticWitchHat;
+import animeware.cosmetic.impl.CosmeticMods.CreeperLight;
+import animeware.cosmetic.impl.CosmeticMods.CrystalWings;
+import animeware.cosmetic.impl.CosmeticMods.DarkCape;
+import animeware.cosmetic.impl.CosmeticMods.DevCape;
+import animeware.cosmetic.impl.CosmeticMods.DragonWings;
+import animeware.cosmetic.impl.CosmeticMods.EmeraldCape;
+import animeware.cosmetic.impl.CosmeticMods.EnchGlint;
+import animeware.cosmetic.impl.CosmeticMods.GalaxyWings;
+import animeware.cosmetic.impl.CosmeticMods.Glasses;
+import animeware.cosmetic.impl.CosmeticMods.GradientBlack;
+import animeware.cosmetic.impl.CosmeticMods.GradientBlue;
+import animeware.cosmetic.impl.CosmeticMods.GradientGreen;
+import animeware.cosmetic.impl.CosmeticMods.GradientPurple;
+import animeware.cosmetic.impl.CosmeticMods.GradientRed;
+import animeware.cosmetic.impl.CosmeticMods.Halo;
+import animeware.cosmetic.impl.CosmeticMods.LCape;
+import animeware.cosmetic.impl.CosmeticMods.NitroCape;
+import animeware.cosmetic.impl.CosmeticMods.OwnerCape;
+import animeware.cosmetic.impl.CosmeticMods.PlanetsCape;
+import animeware.cosmetic.impl.CosmeticMods.QuavCape;
+import animeware.cosmetic.impl.CosmeticMods.QuickCape;
+import animeware.cosmetic.impl.CosmeticMods.ReptyllCape;
+import animeware.cosmetic.impl.CosmeticMods.RetardEyes;
+import animeware.cosmetic.impl.CosmeticMods.RinneCape;
+import animeware.cosmetic.impl.CosmeticMods.Sparkofyt;
+import animeware.cosmetic.impl.CosmeticMods.Sparkofyt2;
+import animeware.cosmetic.impl.CosmeticMods.SwordCape;
+import animeware.cosmetic.impl.CosmeticMods.WitherPet;
+import animeware.cosmetic.impl.CosmeticMods.YTCape;
+import animeware.cosmetic.impl.CosmeticMods.dseyes2cape;
+import animeware.cosmetic.impl.CosmeticMods.dseyescape;
+import animeware.cosmetic.impl.CosmeticMods.kocho2cape;
+import animeware.cosmetic.impl.CosmeticMods.kocho3cape;
+import animeware.cosmetic.impl.CosmeticMods.tanjirocape;
+
+
+public class CosmeticManager {
+
+ public static ArrayList cosmetics = new ArrayList<>();
+
+ public Cape zerotwo;
+ public DarkCape darkCape;
+ public dseyes2cape deamoneyes;
+ public dseyescape deamoneyes2;
+ public EmeraldCape ecape;
+ public GradientBlack gblack;
+ public GradientBlue gblue;
+ public GradientGreen ggreen;
+ public GradientPurple gpurple;
+ public GradientRed gred;
+ public kocho2cape kcape;
+ public kocho3cape kcape2;
+ public LCape lcape;
+ public NitroCape ncape;
+ public PlanetsCape pcape;
+ public QuavCape quavcape;
+ public QuickCape quickcape;
+ public ReptyllCape rcape;
+ public SwordCape scape;
+ public tanjirocape tcape;
+ public Sparkofyt sofyt;
+ public Sparkofyt2 sofyt2;
+
+ public CrystalWings cwings;
+ public DragonWings dwings;
+ public GalaxyWings gwings;
+
+ public CosmeticEasterEggs eggs;
+ public CosmeticWitchHat witchhat;
+ public Glasses glasses;
+ public Halo halo;
+ public RetardEyes retardeyes;
+
+ public OwnerCape ownerCape;
+ public DevCape devCape;
+ public YTCape ytCape;
+
+ public Blaze blaze;
+
+ public Bandana ban;
+ public CreeperLight creeper;
+ //public ChinaHat ch;
+ public WitherPet wpet;
+
+ public ChinaHatModule ch;
+ public RinneCape rinn;
+
+ public CosmeticManager() {
+ cosmetics = new ArrayList<>();
+ cosmetics.add(zerotwo = new Cape());
+ cosmetics.add(darkCape = new DarkCape());
+ cosmetics.add(deamoneyes = new dseyes2cape());
+ cosmetics.add(deamoneyes2 = new dseyescape());
+ cosmetics.add(ecape = new EmeraldCape());
+ cosmetics.add(gblack = new GradientBlack());
+ cosmetics.add(gblue = new GradientBlue());
+ cosmetics.add(ggreen = new GradientGreen());
+ cosmetics.add(gpurple = new GradientPurple());
+ cosmetics.add(gred = new GradientRed());
+ cosmetics.add(kcape = new kocho2cape());
+ cosmetics.add(kcape2 = new kocho3cape());
+ cosmetics.add(lcape = new LCape());
+ cosmetics.add(ncape = new NitroCape());
+ cosmetics.add(pcape = new PlanetsCape());
+ cosmetics.add(quavcape = new QuavCape());
+ cosmetics.add(quickcape = new QuickCape());
+ cosmetics.add(rcape = new ReptyllCape());
+ cosmetics.add(scape = new SwordCape());
+ cosmetics.add(tcape = new tanjirocape());
+ cosmetics.add(sofyt = new Sparkofyt());
+ cosmetics.add(sofyt2 = new Sparkofyt2());
+
+ cosmetics.add(cwings = new CrystalWings());
+ cosmetics.add(dwings = new DragonWings());
+ cosmetics.add(gwings = new GalaxyWings());
+
+ cosmetics.add(eggs = new CosmeticEasterEggs());
+ cosmetics.add(witchhat = new CosmeticWitchHat());
+ cosmetics.add(glasses = new Glasses());
+ cosmetics.add(halo = new Halo());
+ cosmetics.add(retardeyes = new RetardEyes());
+
+ cosmetics.add(ownerCape = new OwnerCape());
+ cosmetics.add(devCape = new DevCape());
+
+ cosmetics.add(blaze = new Blaze());
+
+ cosmetics.add(ban = new Bandana());
+ cosmetics.add(creeper = new CreeperLight());
+ //cosmetics.add(ch = new ChinaHat());
+ cosmetics.add(wpet = new WitherPet());
+
+ cosmetics.add(ch = new ChinaHatModule());
+ cosmetics.add(rinn = new RinneCape());
+
+ }
+ public static ArrayList getCosmetics() {
+ return cosmetics;
+ }
+
+
+}
+
+
diff --git a/src/minecraft/animeware/cosmetic/CosmeticModelBase.java b/src/minecraft/animeware/cosmetic/CosmeticModelBase.java
new file mode 100644
index 0000000..a3f656f
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/CosmeticModelBase.java
@@ -0,0 +1,17 @@
+package animeware.cosmetic;
+
+import net.minecraft.client.model.ModelBase;
+import net.minecraft.client.model.ModelBiped;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+
+public class CosmeticModelBase extends ModelBase {
+
+ protected final ModelBiped playerModel;
+
+ public CosmeticModelBase(RenderPlayer player) {
+
+ this.playerModel = player.getMainModel();
+
+ }
+
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/cosmetic/CosmeticModule.java b/src/minecraft/animeware/cosmetic/CosmeticModule.java
new file mode 100644
index 0000000..3eb78a7
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/CosmeticModule.java
@@ -0,0 +1,180 @@
+package animeware.cosmetic;
+
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import animeware.NightSky;
+import animeware.event.EventManager;
+import animeware.hud.DraggableComponent;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiLabel;
+import net.minecraft.util.ResourceLocation;
+
+public class CosmeticModule {
+
+ public Minecraft mc = Minecraft.getMinecraft();
+ public FontRenderer fr = mc.fontRendererObj;
+ protected List buttonList = Lists.newArrayList();
+ protected List labelList = Lists.newArrayList();
+
+ //public List settings = new ArrayList();
+
+ public int lenght = 10;
+ public String name;
+ //public String description;
+ public ResourceLocation iconcos;
+ public CosmeticType type;
+ //public boolean isEnabled = false;
+ public boolean enabled;
+ public DraggableComponent drag;
+
+ public int x, y, w, h;
+
+ public CosmeticModule(String name, ResourceLocation iconcos, CosmeticType type) {
+ this.name = name;
+ if(type == CosmeticType.CAPE) {
+ this.iconcos = new ResourceLocation("Animeware/icons/cape.png");
+ } else if(type == CosmeticType.WINGS) {
+ this.iconcos = new ResourceLocation("Animeware/icons/blank.png");
+ } else if(type == CosmeticType.HAT) {
+ this.iconcos = new ResourceLocation("Animeware/icons/blank.png");
+ } else if(type == CosmeticType.PET) {
+ this.iconcos = new ResourceLocation("Animeware/icons/blank.png");
+ } else if(type == CosmeticType.OTHER) {
+ this.iconcos = new ResourceLocation("Animeware/icons/blank.png");
+ } else if(type == CosmeticType.BANDANA) {
+ this.iconcos = new ResourceLocation("Animeware/icons/blank.png");
+ } else if(type == CosmeticType.ANIM) {
+ this.iconcos = new ResourceLocation("Animeware/icons/blank.png");
+ } else if(name.equals("Rinnegan Cape - a")) {
+ this.iconcos = new ResourceLocation("Animeware/icons/cape.png");
+ } else {
+ this.iconcos = new ResourceLocation("Animeware/icons/blank.png");
+ }
+ this.type = type;
+
+ try {
+
+ setEnabled(((Boolean)NightSky.INSTANCE.config.config.get(String.valueOf(name.toLowerCase()) + " wearing")));
+
+ } catch (NullPointerException e) {
+ //System.out.println("CosConfig Load Failed - CosmeticManager = " + name);
+ e.printStackTrace();
+ this.enabled = false;
+ }
+
+ //drag = new DraggableComponent(this.x, this.y, getWidth(), getHeight(), new Color(0, 0, 0, 0).getRGB());
+ }
+
+
+ public int getWidth() {
+
+ return 50;
+
+ }
+
+ public int getHeight() {
+ return 50;
+
+ }
+ public ResourceLocation getIcon() {
+ return iconcos;
+ }
+
+ public void draw() {
+
+ }
+
+ public void renderDummy(int mouseX, int mouseY) {
+ drag.draw(mouseX, mouseY);
+
+ }
+
+ public int getX() {
+ return drag.getxPosition();
+ }
+
+ public int getY() {
+ return drag.getyPosition();
+ }
+
+ public void setEnabled(boolean enabled) {
+ /*if(!mc.thePlayer.getName().equals("hypnomacka") && this.name == "Owner Cape") {
+
+ } else if(!mc.thePlayer.getName().equals("hypnomacka") || !mc.thePlayer.getName().equals("KnownAsR3named") || !mc.thePlayer.getName().equals("slepica") || !mc.thePlayer.getName().equals("Fofola") && this.name == "Staff Cape") {
+
+ } else if(!mc.thePlayer.getName().equals("hypnomacka") || !mc.thePlayer.getName().equals("MartoSVK") && this.name == "YT Cape") {
+
+ } else {*/
+ this.enabled = enabled;
+ if(enabled) {
+ onEnable();
+ }
+ else {
+ onDisable();
+ }
+ //}
+ }
+ public void setDisabled(boolean enabled) {
+ this.enabled = !enabled;
+ if(!enabled) {
+ onDisable();
+ }
+ else {
+ onEnable();
+ }
+ }
+
+ public void onEnable() {EventManager.register(this);}
+
+ public void toggle() {
+ this.setEnabled(!enabled);
+
+ }
+
+
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+ public boolean isDisabled() {
+ return !enabled;
+ }
+
+
+ public void onDisable() {
+ NightSky.INSTANCE.eventManager.unregister(this);
+
+ }
+ public void drawScreen(int mouseX, int mouseY, float partialTicks)
+ {
+ for (int i = 0; i < this.buttonList.size(); ++i)
+ {
+ ((GuiButton)this.buttonList.get(i)).drawButton(this.mc, mouseX, mouseY);
+ }
+
+ for (int j = 0; j < this.labelList.size(); ++j)
+ {
+ ((GuiLabel)this.labelList.get(j)).drawLabel(this.mc, mouseX, mouseY);
+ }
+ }
+ //@Override
+ public String getToggled() {
+ return "Toggled";
+ }
+ public void Notif() {
+
+ }
+
+
+}
+
+
+
+
+
+
+
diff --git a/src/minecraft/animeware/cosmetic/CosmeticType.java b/src/minecraft/animeware/cosmetic/CosmeticType.java
new file mode 100644
index 0000000..2297f70
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/CosmeticType.java
@@ -0,0 +1,13 @@
+package animeware.cosmetic;
+
+public enum CosmeticType {
+
+ CAPE,
+ WINGS,
+ HAT,
+ PET,
+ OTHER,
+ BANDANA,
+ ANIM;
+
+}
diff --git a/src/minecraft/animeware/cosmetic/HatChecker.java b/src/minecraft/animeware/cosmetic/HatChecker.java
new file mode 100644
index 0000000..398fe38
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/HatChecker.java
@@ -0,0 +1,21 @@
+package animeware.cosmetic;
+
+import net.minecraft.client.entity.AbstractClientPlayer;
+
+public class HatChecker {
+
+ public static boolean ownsHat(AbstractClientPlayer entitylivingbaseIn) {
+ if(entitylivingbaseIn.getName().equals("hypnomacka")) {
+ return true;
+ }
+
+
+
+
+ else return false;
+ }
+ public static float[] getTopHatColor(AbstractClientPlayer entitylivingbaseIn) {
+ return new float[] {1, 0, 1};
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/ServerShitCapes.java b/src/minecraft/animeware/cosmetic/ServerShitCapes.java
new file mode 100644
index 0000000..bb74d35
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/ServerShitCapes.java
@@ -0,0 +1,320 @@
+package animeware.cosmetic;
+
+import animeware.util.websockets.SocketClient;
+
+public class ServerShitCapes {
+
+ public static boolean isWearingCape1(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape1", username).toString().split(":");
+ if(arguments[0].equals("owns1") && Booleans.QuickCape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape2(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape2", username).toString().split(":");
+ if(arguments[0].equals("owns2") && Booleans.PlanetsCape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape2 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape3(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape3", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.QuavCape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape3 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape4(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape4", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.ReptyllCape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape4 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape5(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape5", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.SwordCape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape5 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape6(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape6", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.EmeraldCape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape6 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape7(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape7", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.LCape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape7 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape8(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape8", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.NitroCape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape8 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape9(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape9", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.DarkCape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape9 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape10(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape10", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.Cape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape10 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape11(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape11", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.YTCape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape11 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape12(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape12", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.DevCape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape12 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape13(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape13", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.OwnerCape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape13 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape14(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape14", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.GradientBlack == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape14 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape15(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape15", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.GradientBlue == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape15 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape16(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape16", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.GradientGreen == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape16 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape17(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape17", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.GradientPurple == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape17 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape18(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape18", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.GradientRed == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape18 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape19(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape19", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.tanjirocape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape19 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape20(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape20", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.kocho2cape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape20 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape21(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape21", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.kocho3cape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape21 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape22(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape22", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.dseyes2cape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape22 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape23(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape23", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.dseyescape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape23 = there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isWearingCape24(String username) {
+ String[] arguments = SocketClient.client.request("isWearingCape24", username).toString().split(":");
+ if(arguments[0].equals("owns") && Booleans.wintercape == true) {
+ //System.out.println("isWearingCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingCape24 = there was an error for " + username);
+ return false;
+ }
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/ServerShitOther.java b/src/minecraft/animeware/cosmetic/ServerShitOther.java
new file mode 100644
index 0000000..7a33e8a
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/ServerShitOther.java
@@ -0,0 +1,21 @@
+package animeware.cosmetic;
+
+import animeware.util.websockets.SocketClient;
+
+public class ServerShitOther {
+
+ public static boolean isWearingQuickCape(String username) {
+ String[] arguments = SocketClient.client.request("isWearingQuickCape", username).toString().split(":");
+ if(arguments[0].equals("true") && Booleans.QuickCape == true) {
+ //System.out.println("isWearingQuickCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingQuickCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingQuickCape = there was an error for " + username);
+ return false;
+ }
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/ServerShitWings.java b/src/minecraft/animeware/cosmetic/ServerShitWings.java
new file mode 100644
index 0000000..3bf7c9f
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/ServerShitWings.java
@@ -0,0 +1,21 @@
+package animeware.cosmetic;
+
+import animeware.util.websockets.SocketClient;
+
+public class ServerShitWings {
+
+ public static boolean isWearingQuickCape(String username) {
+ String[] arguments = SocketClient.client.request("isWearingQuickCape", username).toString().split(":");
+ if(arguments[0].equals("true") && Booleans.QuickCape == true) {
+ //System.out.println("isWearingQuickCape = returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("isWearingQuickCape = returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("isWearingQuickCape = there was an error for " + username);
+ return false;
+ }
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/WingsChecker.java b/src/minecraft/animeware/cosmetic/WingsChecker.java
new file mode 100644
index 0000000..b5f1b45
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/WingsChecker.java
@@ -0,0 +1,18 @@
+package animeware.cosmetic;
+
+import net.minecraft.client.entity.AbstractClientPlayer;
+
+public class WingsChecker {
+
+ public static boolean ownsWings(AbstractClientPlayer entitylivingbaseIn) {
+ if(entitylivingbaseIn.getName().equals("hypnomacka")) {
+ return true;
+ }
+
+
+
+
+ else return false;
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/Bandana.java b/src/minecraft/animeware/cosmetic/impl/Bandana.java
new file mode 100644
index 0000000..1ca5bef
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/Bandana.java
@@ -0,0 +1,90 @@
+package animeware.cosmetic.impl;
+
+
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticBase;
+import animeware.cosmetic.CosmeticModelBase;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.Entity;
+import net.minecraft.util.ResourceLocation;
+
+public class Bandana extends CosmeticBase {
+ private final ModelBandana modelBandana;
+
+
+ public Bandana(RenderPlayer renderPlayer) {
+ super(renderPlayer);
+ modelBandana = new ModelBandana(renderPlayer);
+ }
+
+ @Override
+ public void render(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float headYaw, float headPitch, float scale) {
+
+ if(Minecraft.getMinecraft().thePlayer.inventory.armorInventory[3] == null && Booleans.Bandana == true && player == Minecraft.getMinecraft().thePlayer && !player.isInvisible()) {
+ GL11.glPushMatrix();
+ renderPlayer.bindTexture(new ResourceLocation("Animeware/bandana.png"));
+ float[] color = {255, 255, 255};
+
+ GL11.glColor3f(color[0], color[1], color[2]);
+ modelBandana.render(player, limbSwing, limbSwingAmount, ageInTicks, headYaw, headPitch, scale);
+ GL11.glPopMatrix();
+ }
+ }
+
+
+
+
+ private class ModelBandana extends CosmeticModelBase {
+
+ private ModelRenderer model1;
+ private ModelRenderer model2;
+ private ModelRenderer model3;
+ private ModelRenderer model4;
+
+ public ModelBandana(RenderPlayer player) {
+ super(player);
+ this.model1 = new ModelRenderer(playerModel, 0, 0);
+ this.model1.addBox(-4.5f, -7.0f, -4.7f, 9, 2, 1);
+ this.model2 = new ModelRenderer(playerModel, 0, 0);
+ this.model2.addBox(3.5f, -7.0f, -3.5f, 1, 2, 8);
+ this.model3 = new ModelRenderer(playerModel, 0, 0);
+ this.model3.addBox(-4.5f, -7.0f, -3.5f, 1, 2, 8);
+ this.model4 = new ModelRenderer(playerModel, 0, 0);
+ this.model4.addBox(-4.5f, -7.0f, 4.0f, 9, 2, 1);
+ }
+
+
+ @Override
+ public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float headYaw, float headPitch, float scale) {
+ if (entityIn.isSneaking()) {
+ GL11.glTranslated(0.0, 0.225, 0.0);
+ }
+ this.model1.rotateAngleX = playerModel.bipedHead.rotateAngleX;
+ this.model1.rotateAngleY = playerModel.bipedHead.rotateAngleY;
+ this.model1.rotationPointX = 0.0f;
+ this.model1.rotationPointY = 0.0f;
+ this.model1.render(scale);
+ this.model2.rotateAngleX = playerModel.bipedHead.rotateAngleX;
+ this.model2.rotateAngleY = playerModel.bipedHead.rotateAngleY;
+ this.model2.rotationPointX = 0.0f;
+ this.model2.rotationPointY = 0.0f;
+ this.model2.render(scale);
+ this.model3.rotateAngleX = playerModel.bipedHead.rotateAngleX;
+ this.model3.rotateAngleY = playerModel.bipedHead.rotateAngleY;
+ this.model3.rotationPointX = 0.0f;
+ this.model3.rotationPointY = 0.0f;
+ this.model3.render(scale);
+ this.model4.rotateAngleX = playerModel.bipedHead.rotateAngleX;
+ this.model4.rotateAngleY = playerModel.bipedHead.rotateAngleY;
+ this.model4.rotationPointX = 0.0f;
+ this.model4.rotationPointY = 0.0f;
+ this.model4.render(scale);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/cosmetic/impl/Cape.java b/src/minecraft/animeware/cosmetic/impl/Cape.java
new file mode 100644
index 0000000..2e02ff0
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/Cape.java
@@ -0,0 +1,172 @@
+package animeware.cosmetic.impl;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.Cosmetic;
+import animeware.cosmetic.CosmeticChecker;
+import animeware.util.cosmetic.AnimUtil;
+import animeware.util.render.AnimatedResourceLocation;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.client.renderer.entity.layers.LayerCape;
+import net.minecraft.entity.player.EnumPlayerModelParts;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+
+public class Cape extends Cosmetic
+{
+ public AnimatedResourceLocation gif;
+
+ public boolean nocape;
+
+ LayerCape lCape;
+
+ private final RenderPlayer playerRenderer;
+
+ public Cape(RenderPlayer renderPlayer) {
+ super("Cape", true, renderPlayer);
+ this.playerRenderer = renderPlayer;
+ }
+
+
+ public boolean shouldCombineTextures()
+ {
+ return false;
+ }
+
+
+ public static void update() {
+ //timer = timer + mc.thePlayer.ticksExisted;
+ /*if(NightSky.timer == 50) {
+ NightSky.timer = 0;
+ }
+ int maxFrames = 2;
+ if (NightSky.timer == 49)
+ //ticks = 1;
+ NightSky.ticks++;
+ System.out.println(NightSky.ticks);
+
+ if (NightSky.ticks > maxFrames) {
+ NightSky.ticks = 1;
+ }*/
+ }
+
+ @Override
+ public void render(AbstractClientPlayer entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks,
+ float ageInTicks, float netHeadYaw, float headPitch, float scale) {
+ gif = new AnimatedResourceLocation("Animeware/cosmetic/capes/anim/lightning", 10, 5);
+ if (entitylivingbaseIn.hasPlayerInfo() && !entitylivingbaseIn.isInvisible() && entitylivingbaseIn.isWearing(EnumPlayerModelParts.CAPE)/* && CapeChecker.ownsZeroTwoCape(entitylivingbaseIn)*/)
+ {
+
+ //gif = new AnimatedResourceLocation("Animeware/cosmetic/capes/anim/lightning", 10, 5);
+ //if(CosmeticController.shouldZeroTwoCape(entitylivingbaseIn) && entitylivingbaseIn == Minecraft.getMinecraft().thePlayer) {
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ //if (Animeware.QuickCape && ServerShitCapes.isWearingCape1(((AbstractClientPlayer) entitylivingbaseIn).getGameProfile().getName())) {
+ try {
+ if(entitylivingbaseIn == Minecraft.getMinecraft().thePlayer && !entitylivingbaseIn.isInvisible()) {
+ if (Booleans.QuickCape && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/quick.png"));
+ } else if (Booleans.PlanetsCape && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/planetscape.png"));
+ } else if (Booleans.QuavCape && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/quav_cape.png"));
+ } else if (Booleans.ReptyllCape && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/reptyll.png"));
+ } else if (Booleans.SwordCape && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/swordcape.png"));
+ } else if (Booleans.EmeraldCape && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/emeraldcape.png"));
+ } else if (Booleans.LCape && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/lcape.png"));
+ } else if (Booleans.NitroCape && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/nitro.png"));
+ } else if (Booleans.DarkCape && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/darkcape.png"));
+ } else if (Booleans.Cape && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/cape.png"));
+ } else if (Booleans.YTCape && CosmeticChecker.ownsYtCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/yt.png"));
+ } else if (Booleans.DevCape && CosmeticChecker.ownsDevCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/devcape.png"));
+ } else if (Booleans.OwnerCape && CosmeticChecker.ownsOwnerCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/ownercape.png"));
+ } else if (Booleans.GradientBlack && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/gradientblack.png"));
+ } else if (Booleans.GradientBlue && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/gradientblue.png"));
+ } else if (Booleans.GradientGreen && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/gradientgreen.png"));
+ } else if (Booleans.GradientPurple && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/gradientpurple.png"));
+ } else if (Booleans.GradientRed && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/gradientred.png"));
+ } else if (Booleans.tanjirocape && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/tanjirocape.png"));
+ } else if (Booleans.kocho2cape && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/kocho2cape.png"));
+ } else if (Booleans.kocho3cape && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/kocho3cape.png"));
+ } else if (Booleans.dseyes2cape && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/dseyes2cape.png"));
+ } else if (Booleans.dseyescape && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/dseyescape.png"));
+ } else if (Booleans.wintercape && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/wintercape.png"));
+ } else if (Booleans.Sparkofyt && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/discord/sparkofytcape.png"));
+ } else if (Booleans.Sparkofyt2 && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/discord/sparkofyt2cape.png"));
+ } else if (Booleans.RinneCape && CosmeticChecker.ownsZeroTwoCape(entitylivingbaseIn)) {
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/ani/rinnegan/" + AnimUtil.frames + ".png")); //Animeware/cosmetic/capes/blank.png
+ } else {
+ //this.nocape = true;
+ //this.playerRenderer.bindTexture(new ResourceLocation(null)); //Animeware/cosmetic/capes/blank.png
+ }
+ }
+ } catch(NullPointerException e) {
+ this.playerRenderer.bindTexture(new ResourceLocation(null));
+ e.printStackTrace();
+ }
+
+ GlStateManager.pushMatrix();
+ GlStateManager.translate(0.0F, 0.0F, 0.125F);
+ double d0 = entitylivingbaseIn.prevChasingPosX + (entitylivingbaseIn.chasingPosX - entitylivingbaseIn.prevChasingPosX) * (double)partialTicks - (entitylivingbaseIn.prevPosX + (entitylivingbaseIn.posX - entitylivingbaseIn.prevPosX) * (double)partialTicks);
+ double d1 = entitylivingbaseIn.prevChasingPosY + (entitylivingbaseIn.chasingPosY - entitylivingbaseIn.prevChasingPosY) * (double)partialTicks - (entitylivingbaseIn.prevPosY + (entitylivingbaseIn.posY - entitylivingbaseIn.prevPosY) * (double)partialTicks);
+ double d2 = entitylivingbaseIn.prevChasingPosZ + (entitylivingbaseIn.chasingPosZ - entitylivingbaseIn.prevChasingPosZ) * (double)partialTicks - (entitylivingbaseIn.prevPosZ + (entitylivingbaseIn.posZ - entitylivingbaseIn.prevPosZ) * (double)partialTicks);
+ float f = entitylivingbaseIn.prevRenderYawOffset + (entitylivingbaseIn.renderYawOffset - entitylivingbaseIn.prevRenderYawOffset) * partialTicks;
+ double d3 = (double)MathHelper.sin(f * (float)Math.PI / 180.0F);
+ double d4 = (double)(-MathHelper.cos(f * (float)Math.PI / 180.0F));
+ float f1 = (float)d1 * 10.0F;
+ f1 = MathHelper.clamp_float(f1, -6.0F, 32.0F);
+ float f2 = (float)(d0 * d3 + d2 * d4) * 100.0F;
+ float f3 = (float)(d0 * d4 - d2 * d3) * 100.0F;
+
+ if (f2 < 0.0F)
+ {
+ f2 = 0.0F;
+ }
+
+ float f4 = entitylivingbaseIn.prevCameraYaw + (entitylivingbaseIn.cameraYaw - entitylivingbaseIn.prevCameraYaw) * partialTicks;
+ f1 = f1 + MathHelper.sin((entitylivingbaseIn.prevDistanceWalkedModified + (entitylivingbaseIn.distanceWalkedModified - entitylivingbaseIn.prevDistanceWalkedModified) * partialTicks) * 6.0F) * 32.0F * f4;
+
+ if (entitylivingbaseIn.isSneaking())
+ {
+ f1 += 25.0F;
+ }
+ if (entitylivingbaseIn.isSneaking())
+ {
+ //f1 += 25.0F;
+ GlStateManager.translate(0.0F, 0.142F, -0.0178F);
+ //GlStateManager.translate(0.0F, 0.0F, 0.0F);
+ }
+
+ GlStateManager.rotate(6.0F + f2 / 2.0F + f1, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(f3 / 2.0F, 0.0F, 0.0F, 1.0F);
+ GlStateManager.rotate(-f3 / 2.0F, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F);
+ this.playerRenderer.getMainModel().renderCape(0.0625F);
+ GlStateManager.popMatrix();
+ }
+ }
+ }
diff --git a/src/minecraft/animeware/cosmetic/impl/CatEars.java b/src/minecraft/animeware/cosmetic/impl/CatEars.java
new file mode 100644
index 0000000..d0fbace
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CatEars.java
@@ -0,0 +1,122 @@
+package animeware.cosmetic.impl;
+
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.Cosmetic;
+import animeware.cosmetic.CosmeticModule;
+import animeware.event.EventListener;
+import animeware.event.impl.Render3DEvent;
+import animeware.hud.Category;
+import animeware.util.MathUtils;
+import animeware.util.render.ColorUtil;
+import animeware.util.render.RenderUtil;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.OpenGlHelper;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+
+public class CatEars extends Cosmetic {
+
+ //private final BooleanSetting firstPerson = new BooleanSetting("Show in first person", false);
+
+ public CatEars(RenderPlayer renderPlayer) {
+ super("ChinaHat", true, renderPlayer);
+ this.playerRenderer = renderPlayer;
+ }
+
+ @Override
+ public void render(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks,
+ float ageInTicks, float netHeadYaw, float headPitch, float scale) {
+ if (mc.thePlayer == null || mc.theWorld == null || mc.thePlayer.isInvisible() || mc.thePlayer.isDead || Booleans.ChinaHat == false) return;
+ if (mc.gameSettings.thirdPersonView == 0) return;
+
+ if(player == Minecraft.getMinecraft().thePlayer && !player.isInvisible()) {
+
+ double posX = mc.thePlayer.lastTickPosX + (mc.thePlayer.posX - mc.thePlayer.lastTickPosX) * mc.timer.renderPartialTicks - mc.getRenderManager().renderPosX,
+ posY = mc.thePlayer.lastTickPosY + (mc.thePlayer.posY - mc.thePlayer.lastTickPosY) * mc.timer.renderPartialTicks - mc.getRenderManager().renderPosY - (mc.thePlayer.isSneaking() ? 1 : 1.1),
+ posZ = mc.thePlayer.lastTickPosZ + (mc.thePlayer.posZ - mc.thePlayer.lastTickPosZ) * mc.timer.renderPartialTicks - mc.getRenderManager().renderPosZ;
+
+ AxisAlignedBB axisalignedbb = mc.thePlayer.getEntityBoundingBox();
+ double height = axisalignedbb.maxY - axisalignedbb.minY + 0.02,
+ radius = axisalignedbb.maxX - axisalignedbb.minX;
+
+ GL11.glPushMatrix();
+ GlStateManager.disableCull();
+ GL11.glDisable(GL11.GL_DEPTH_TEST);
+ GL11.glDepthMask(false);
+ GL11.glDisable(GL11.GL_TEXTURE_2D);
+ GL11.glShadeModel(GL11.GL_SMOOTH);
+ GL11.glEnable(GL11.GL_BLEND);
+ GlStateManager.disableLighting();
+ GlStateManager.color(1, 1, 1, 1);
+ OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO);
+
+ float yaw = MathUtils.interpolate(mc.thePlayer.prevRotationYaw, mc.thePlayer.rotationYaw, mc.timer.renderPartialTicks).floatValue();
+ float pitchInterpolate = MathUtils.interpolate(mc.thePlayer.prevRenderArmPitch, mc.thePlayer.renderArmPitch, mc.timer.renderPartialTicks).floatValue();
+
+ GL11.glTranslated(posX, posY, posZ);
+ GL11.glEnable(GL11.GL_LINE_SMOOTH);
+ GL11.glHint(GL11.GL_LINE_SMOOTH_HINT, GL11.GL_NICEST);
+ GL11.glRotated(yaw, posX, posY, posZ);
+ GL11.glRotated(pitchInterpolate / 9.0, posX, posY, posZ);
+ GL11.glTranslatef(0, 0, -0.0F);
+ GL11.glLineWidth(2);
+ GL11.glBegin(GL11.GL_LINE_LOOP);
+
+ // outline/border or whatever you call it
+ for (int i = 0; i <= 180; i++) {
+ int color1 = ColorUtil.rainbow(7, i * 4, 1, 1, .5f).getRGB();
+ GlStateManager.color(1, 1, 1, 1);
+ RenderUtil.color(color1);
+
+ GL11.glVertex3d(
+ posX - Math.sin(i * MathHelper.PI2 / 90) * radius,
+ posY + height - 0.002,
+ posZ + Math.cos(i * MathHelper.PI2 / 90) * radius
+ );
+
+ }
+ GL11.glEnd();
+
+ GL11.glBegin(GL11.GL_TRIANGLE_FAN);
+ int color12 = ColorUtil.rainbow(7, 4, 1, 1, .7f).getRGB();
+ RenderUtil.color(color12);
+
+
+ GL11.glVertex3d(posX, posY + height - 0.3, posZ);
+
+
+
+ // draw hat
+ for (int i = 0; i <= 180; i++) {
+ int color1 = ColorUtil.rainbow(7, i * 4, 1, 1, .2f).getRGB();
+ GlStateManager.color(1, 1, 1, 1);
+ RenderUtil.color(color1);
+ GL11.glVertex3d(posX - Math.sin(i * MathHelper.PI2 / 90) * radius,
+ posY + height - 0,
+ posZ + Math.cos(i * MathHelper.PI2 / 90) * radius
+ );
+
+ }
+ //GL11.glVertex3d(posX, posY + height + 0.3, posZ);
+ GL11.glEnd();
+
+
+ GL11.glPopMatrix();
+
+ GL11.glEnable(GL11.GL_CULL_FACE);
+ GL11.glEnable(GL11.GL_TEXTURE_2D);
+ GL11.glShadeModel(GL11.GL_FLAT);
+ GL11.glDepthMask(true);
+ GL11.glEnable(GL11.GL_DEPTH_TEST);
+ }
+ }
+
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/ChinaHat.java b/src/minecraft/animeware/cosmetic/impl/ChinaHat.java
new file mode 100644
index 0000000..81c7eb5
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/ChinaHat.java
@@ -0,0 +1,122 @@
+package animeware.cosmetic.impl;
+
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.Cosmetic;
+import animeware.cosmetic.CosmeticModule;
+import animeware.event.EventListener;
+import animeware.event.impl.Render3DEvent;
+import animeware.hud.Category;
+import animeware.util.MathUtils;
+import animeware.util.render.ColorUtil;
+import animeware.util.render.RenderUtil;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.OpenGlHelper;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+
+public class ChinaHat extends Cosmetic {
+
+ //private final BooleanSetting firstPerson = new BooleanSetting("Show in first person", false);
+
+ public ChinaHat(RenderPlayer renderPlayer) {
+ super("ChinaHat", true, renderPlayer);
+ this.playerRenderer = renderPlayer;
+ }
+
+ @Override
+ public void render(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks,
+ float ageInTicks, float netHeadYaw, float headPitch, float scale) {
+ if (mc.thePlayer == null || mc.theWorld == null || mc.thePlayer.isInvisible() || mc.thePlayer.isDead || Booleans.ChinaHat == false) return;
+ if (mc.gameSettings.thirdPersonView == 0) return;
+
+ if(player == Minecraft.getMinecraft().thePlayer && !player.isInvisible()) {
+
+ double posX = mc.thePlayer.lastTickPosX + (mc.thePlayer.posX - mc.thePlayer.lastTickPosX) * mc.timer.renderPartialTicks - mc.getRenderManager().renderPosX,
+ posY = mc.thePlayer.lastTickPosY + (mc.thePlayer.posY - mc.thePlayer.lastTickPosY) * mc.timer.renderPartialTicks - mc.getRenderManager().renderPosY - (mc.thePlayer.isSneaking() ? 1 : 1.1),
+ posZ = mc.thePlayer.lastTickPosZ + (mc.thePlayer.posZ - mc.thePlayer.lastTickPosZ) * mc.timer.renderPartialTicks - mc.getRenderManager().renderPosZ;
+
+ AxisAlignedBB axisalignedbb = mc.thePlayer.getEntityBoundingBox();
+ double height = axisalignedbb.maxY - axisalignedbb.minY + 0.02,
+ radius = axisalignedbb.maxX - axisalignedbb.minX;
+
+ GL11.glPushMatrix();
+ GlStateManager.disableCull();
+ GL11.glDisable(GL11.GL_DEPTH_TEST);
+ GL11.glDepthMask(false);
+ GL11.glDisable(GL11.GL_TEXTURE_2D);
+ GL11.glShadeModel(GL11.GL_SMOOTH);
+ GL11.glEnable(GL11.GL_BLEND);
+ GlStateManager.disableLighting();
+ GlStateManager.color(1, 1, 1, 1);
+ OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO);
+
+ float yaw = MathUtils.interpolate(mc.thePlayer.prevRotationYaw, mc.thePlayer.rotationYaw, mc.timer.renderPartialTicks).floatValue();
+ float pitchInterpolate = MathUtils.interpolate(mc.thePlayer.prevRenderArmPitch, mc.thePlayer.renderArmPitch, mc.timer.renderPartialTicks).floatValue();
+
+ GL11.glTranslated(posX, posY, posZ);
+ GL11.glEnable(GL11.GL_LINE_SMOOTH);
+ GL11.glHint(GL11.GL_LINE_SMOOTH_HINT, GL11.GL_NICEST);
+ GL11.glRotated(yaw, posX, posY, posZ);
+ GL11.glRotated(pitchInterpolate / 9.0, posX, posY, posZ);
+ GL11.glTranslatef(0, 0, -0.0F);
+ GL11.glLineWidth(2);
+ GL11.glBegin(GL11.GL_LINE_LOOP);
+
+ // outline/border or whatever you call it
+ for (int i = 0; i <= 180; i++) {
+ int color1 = ColorUtil.rainbow(7, i * 4, 1, 1, .5f).getRGB();
+ GlStateManager.color(1, 1, 1, 1);
+ RenderUtil.color(color1);
+
+ GL11.glVertex3d(
+ posX - Math.sin(i * MathHelper.PI2 / 90) * radius,
+ posY + height - 0.002,
+ posZ + Math.cos(i * MathHelper.PI2 / 90) * radius
+ );
+
+ }
+ GL11.glEnd();
+
+ GL11.glBegin(GL11.GL_TRIANGLE_FAN);
+ int color12 = ColorUtil.rainbow(7, 4, 1, 1, .7f).getRGB();
+ RenderUtil.color(color12);
+
+
+ GL11.glVertex3d(posX, posY + height - 0.3, posZ);
+
+
+
+ // draw hat
+ for (int i = 0; i <= 180; i++) {
+ int color1 = ColorUtil.rainbow(7, i * 4, 1, 1, .2f).getRGB();
+ GlStateManager.color(1, 1, 1, 1);
+ RenderUtil.color(color1);
+ GL11.glVertex3d(posX - Math.sin(i * MathHelper.PI2 / 90) * radius,
+ posY + height - 0,
+ posZ + Math.cos(i * MathHelper.PI2 / 90) * radius
+ );
+
+ }
+ //GL11.glVertex3d(posX, posY + height + 0.3, posZ);
+ GL11.glEnd();
+
+
+ GL11.glPopMatrix();
+
+ GL11.glEnable(GL11.GL_CULL_FACE);
+ GL11.glEnable(GL11.GL_TEXTURE_2D);
+ GL11.glShadeModel(GL11.GL_FLAT);
+ GL11.glDepthMask(true);
+ GL11.glEnable(GL11.GL_DEPTH_TEST);
+ }
+ }
+
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticBlaze.java b/src/minecraft/animeware/cosmetic/impl/CosmeticBlaze.java
new file mode 100644
index 0000000..fd49bf4
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticBlaze.java
@@ -0,0 +1,115 @@
+package animeware.cosmetic.impl;
+
+import java.awt.Color;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticBase;
+import animeware.cosmetic.CosmeticModelBase;
+import animeware.util.ChromaString;
+import java.awt.Color;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelPlayer;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.Entity;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+//import we.LWhite.RainbowColor;
+
+
+public class CosmeticBlaze extends CosmeticBase
+{
+ CosmeticBlaze.BlazeModel blazeModel;
+ private static final ResourceLocation blazeTextures = new ResourceLocation("Animeware/cosmetic/blaze.png");
+
+ public CosmeticBlaze(RenderPlayer player)
+ {
+ super(player);
+ this.blazeModel = new CosmeticBlaze.BlazeModel(player);
+ }
+
+ public void render(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale)
+ {
+
+
+ if(Booleans.Blaze && player == Minecraft.getMinecraft().thePlayer && !player.isInvisible()) {
+ GlStateManager.pushMatrix();
+ this.renderPlayer.bindTexture(blazeTextures);
+ this.blazeModel.setModelAttributes(this.renderPlayer.getMainModel());
+ //Color.getColor(String.valueOf());
+ //Color.getColor(null, new Color(0, 100, 0, 255).getRGB());
+ this.blazeModel.render(player, limbSwing, limbSwingAmount, ageInTicks, headPitch, headPitch, scale);
+ GlStateManager.popMatrix();
+ } else {
+
+ }
+
+
+
+ }
+
+ private static class BlazeModel extends CosmeticModelBase
+ {
+ private ModelRenderer[] blazeSticks = new ModelRenderer[12];
+
+ public BlazeModel(RenderPlayer player)
+ {
+ super(player);
+
+ for (int i = 0; i < this.blazeSticks.length; ++i)
+ {
+ this.blazeSticks[i] = new ModelRenderer(this.playerModel, 0, 16);
+ this.blazeSticks[i].addBox(0.0F, 0.0F, 0.0F, 2, 8, 2);
+ }
+ }
+
+ public void render(Entity entityIn, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float scale)
+ {
+ this.setRotationAngles(p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, scale, entityIn);
+
+ for (ModelRenderer modelrenderer : this.blazeSticks)
+ {
+ modelrenderer.render(scale);
+ }
+ }
+
+ public void setRotationAngles(float p_78087_1_, float p_78087_2_, float p_78087_3_, float p_78087_4_, float p_78087_5_, float p_78087_6_, Entity entityIn)
+ {
+ float f = p_78087_3_ * (float)Math.PI * -0.1F;
+
+ for (int i = 0; i < 4; ++i)
+ {
+ this.blazeSticks[i].rotationPointY = -2.0F + MathHelper.cos(((float)(i * 2) + p_78087_3_) * 0.25F);
+ this.blazeSticks[i].rotationPointX = MathHelper.cos(f) * 9.0F;
+ this.blazeSticks[i].rotationPointZ = MathHelper.sin(f) * 9.0F;
+ ++f;
+ }
+
+ f = ((float)Math.PI / 4F) + p_78087_3_ * (float)Math.PI * 0.03F;
+
+ for (int j = 4; j < 8; ++j)
+ {
+ this.blazeSticks[j].rotationPointY = 2.0F + MathHelper.cos(((float)(j * 2) + p_78087_3_) * 0.25F);
+ this.blazeSticks[j].rotationPointX = MathHelper.cos(f) * 7.0F;
+ this.blazeSticks[j].rotationPointZ = MathHelper.sin(f) * 7.0F;
+ ++f;
+ }
+
+ f = 0.47123894F + p_78087_3_ * (float)Math.PI * -0.05F;
+
+ for (int k = 8; k < 12; ++k)
+ {
+ this.blazeSticks[k].rotationPointY = 11.0F + MathHelper.cos(((float)k * 1.5F + p_78087_3_) * 0.5F);
+ this.blazeSticks[k].rotationPointX = MathHelper.cos(f) * 5.0F;
+ this.blazeSticks[k].rotationPointZ = MathHelper.sin(f) * 5.0F;
+ ++f;
+ }
+ }
+
+ public void setModelAttributes(ModelPlayer mainModel) {
+ }
+ }
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticCreeperLightning.java b/src/minecraft/animeware/cosmetic/impl/CosmeticCreeperLightning.java
new file mode 100644
index 0000000..f1d6dca
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticCreeperLightning.java
@@ -0,0 +1,56 @@
+package animeware.cosmetic.impl;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticBase;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelPlayer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.util.ResourceLocation;
+
+
+public class CosmeticCreeperLightning extends CosmeticBase
+{
+ private static final ResourceLocation LIGHTNING_TEXTURE = new ResourceLocation("Animeware/cosmetic/creeper_armor.png");
+ private final RenderPlayer renderPlayer;
+ private ModelPlayer playerModel;
+
+ public CosmeticCreeperLightning(RenderPlayer renderPlayer)
+ {
+ super(renderPlayer);
+ this.renderPlayer = renderPlayer;
+ this.playerModel = renderPlayer.getMainModel();
+ }
+
+ public void render(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale)
+ {
+
+
+ if(Booleans.CreeperLightning == true) {
+ boolean flag = player.isInvisible();
+ GlStateManager.depthMask(!flag);
+ this.playerModel = this.renderPlayer.getMainModel();
+ this.renderPlayer.bindTexture(LIGHTNING_TEXTURE);
+ GlStateManager.matrixMode(5890);
+ GlStateManager.loadIdentity();
+ float f = (float)player.ticksExisted + partialTicks;
+ double d0 = 0.5;
+ GlStateManager.translate((double)1 / -100, (double)f * d0, 0.0D);
+ GlStateManager.matrixMode(5888);
+ GlStateManager.enableBlend();
+
+ GlStateManager.disableLighting();
+ GlStateManager.blendFunc(1, 1);
+ this.playerModel.setModelAttributes(this.renderPlayer.getMainModel());
+ this.playerModel.render(player, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, 0.0625F);
+ GlStateManager.matrixMode(5890);
+ GlStateManager.loadIdentity();
+ GlStateManager.matrixMode(5888);
+ GlStateManager.enableLighting();
+ GlStateManager.disableBlend();
+ GlStateManager.depthMask(flag);
+ GlStateManager.disableLighting();
+ }
+
+ }
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticCrystalWings.java b/src/minecraft/animeware/cosmetic/impl/CosmeticCrystalWings.java
new file mode 100644
index 0000000..8175e78
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticCrystalWings.java
@@ -0,0 +1,103 @@
+package animeware.cosmetic.impl;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticBase;
+import animeware.cosmetic.CosmeticModelBase;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelBase;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.Entity;
+import net.minecraft.util.ResourceLocation;
+
+public class CosmeticCrystalWings extends CosmeticBase {
+ private CrytsalWingsModel crytsalWingsModel;
+
+ public CosmeticCrystalWings(RenderPlayer playerRenderer) {
+ super(playerRenderer);
+ this.crytsalWingsModel = new CrytsalWingsModel(playerRenderer);
+ }
+
+ public void render(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) {
+ this.crytsalWingsModel.render((Entity)player, limbSwing, limbSwingAmount, ageInTicks, headPitch, headPitch, scale);
+ }
+
+ public class CrytsalWingsModel extends CosmeticModelBase {
+ private ModelRenderer model;
+
+ ResourceLocation resourceLocation = new ResourceLocation("Animeware/cosmetic/crystal.png");
+
+ public CrytsalWingsModel(RenderPlayer player) {
+ super(player);
+ int i = 30;
+ int j = 24;
+ this.model = (new ModelRenderer((ModelBase)this)).setTextureSize(i, j).setTextureOffset(0, 8);
+ this.model.setRotationPoint(-0.0F, 1.0F, 0.0F);
+ this.model.addBox(0.0F, -3.0F, 0.0F, 14, 7, 1);
+ this.model.isHidden = true;
+ ModelRenderer modelrenderer = (new ModelRenderer((ModelBase)this)).setTextureSize(i, j).setTextureOffset(0, 16);
+ modelrenderer.setRotationPoint(-0.0F, 0.0F, 0.2F);
+ modelrenderer.addBox(0.0F, -3.0F, 0.0F, 14, 7, 1);
+ this.model.addChild(modelrenderer);
+ ModelRenderer modelrenderer1 = (new ModelRenderer((ModelBase)this)).setTextureSize(i, j).setTextureOffset(0, 0);
+ modelrenderer1.setRotationPoint(-0.0F, 0.0F, 0.2F);
+ modelrenderer1.addBox(0.0F, -3.0F, 0.0F, 14, 7, 1);
+ modelrenderer.addChild(modelrenderer1);
+ }
+
+ public void render(Entity entityIn, float p_78088_2_, float walkingSpeed, float tickValue, float p_78088_5_, float p_78088_6_, float scale) {
+ if(entityIn == Minecraft.getMinecraft().thePlayer && !entityIn.isInvisible() && Booleans.CrystalWings) {
+ float f = (float)Math.cos((tickValue / 10.0F)) / 20.0F - 0.03F - walkingSpeed / 20.0F;
+ ModelRenderer modelrenderer = (ModelRenderer) this.model.childModels.get(0);
+ ModelRenderer modelrenderer1 = (ModelRenderer) modelrenderer.childModels.get(0);
+ this.model.rotateAngleZ = f * 3.0F;
+ modelrenderer.rotateAngleZ = f / 2.0F;
+ modelrenderer1.rotateAngleZ = f / 2.0F;
+ this.model.rotateAngleY = -0.3F - walkingSpeed / 3.0F;
+ this.model.rotateAngleX = 0.3F;
+ GlStateManager.pushMatrix();
+ GlStateManager.scale(1.6D, 1.6D, 1.0D);
+ GlStateManager.translate(0.0D, 0.05000000074505806D, 0.05000000074505806D);
+ if (entityIn.isSneaking()) {
+ GlStateManager.translate(0.0D, 0.07999999821186066D, 0.029999999329447746D);
+ GlStateManager.rotate(20.0F, 1.0F, 0.0F, 0.0F);
+ this.model.rotateAngleZ = 0.8F;
+ modelrenderer.rotateAngleZ = 0.0F;
+ modelrenderer1.rotateAngleZ = 0.0F;
+ } else {
+ RenderManager rendermanager = Minecraft.getMinecraft().getRenderManager();
+ if (rendermanager != null)
+ GlStateManager.rotate(rendermanager.playerViewX / 3.0F, 1.0F, 0.0F, 0.0F);
+ }
+ this.model.isHidden = false;
+ for (int i = -1; i <= 1; i += 2) {
+ GlStateManager.pushMatrix();
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 0.3F);
+ GlStateManager.depthMask(false);
+ GlStateManager.enableBlend();
+ GlStateManager.blendFunc(770, 771);
+ GlStateManager.alphaFunc(516, 0.003921569F);
+ GlStateManager.disableLighting();
+
+ //Edit the Color
+ GlStateManager.color(0, 0, 0);
+
+ Minecraft.getMinecraft().getTextureManager().bindTexture(this.resourceLocation);
+ if (i == 1)
+ GlStateManager.scale(-1.0F, 1.0F, 1.0F);
+ GlStateManager.translate(0.05D, 0.0D, 0.0D);
+ this.model.render(scale);
+ GlStateManager.disableBlend();
+ GlStateManager.alphaFunc(516, 0.1F);
+ GlStateManager.popMatrix();
+ GlStateManager.depthMask(true);
+ }
+ this.model.isHidden = true;
+ GlStateManager.popMatrix();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticDogPet.java b/src/minecraft/animeware/cosmetic/impl/CosmeticDogPet.java
new file mode 100644
index 0000000..5512ea6
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticDogPet.java
@@ -0,0 +1,143 @@
+package animeware.cosmetic.impl;
+
+import java.io.IOException;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.cosmetic.CosmeticBase;
+import animeware.cosmetic.CosmeticModelBase;
+import animeware.util.DatabaseUtil;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelBase;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+
+public class CosmeticDogPet extends CosmeticBase {
+ WolfModel wolfModel;
+
+ public static final ResourceLocation TEXTURE = new ResourceLocation("Animeware/cosmetic/DogPet.png");
+
+ public CosmeticDogPet(RenderPlayer player) {
+ super(player);
+ this.wolfModel = new WolfModel(player);
+ }
+
+ public void render(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) {
+ GlStateManager.pushMatrix();
+ try {
+ if (DatabaseUtil.getBoolean(player.getUniqueID().toString(), "dogpet")) {
+ this.renderPlayer.bindTexture(TEXTURE);
+ if (player.isSneaking())
+ GlStateManager.translate(0.0D, 0.045D, 0.0D);
+ this.wolfModel.render((Entity)player, limbSwing, limbSwingAmount, ageInTicks, headPitch, headPitch, scale);
+ GL11.glColor3f(1.0F, 1.0F, 1.0F);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ GL11.glPopMatrix();
+ }
+
+ static class WolfModel extends CosmeticModelBase {
+
+ private final ModelRenderer wolfHeadMain;
+ private final ModelRenderer wolfBody;
+ private final ModelRenderer wolfMane;
+ private final ModelRenderer wolfLeg1;
+ private final ModelRenderer wolfLeg2;
+ private final ModelRenderer wolfLeg3;
+ private final ModelRenderer wolfLeg4;
+ private final ModelRenderer wolfTail;
+
+ public WolfModel(RenderPlayer player) {
+ super(player);
+ float f = 0.0F;
+ float f1 = 13.5F;
+ this.wolfHeadMain = new ModelRenderer((ModelBase)this, 0, 0);
+ this.wolfHeadMain.addBox(-3.0F, -3.0F, -2.0F, 6, 6, 4, f);
+ this.wolfHeadMain.setRotationPoint(-1.0F, f1, -7.0F);
+ this.wolfBody = new ModelRenderer((ModelBase)this, 18, 14);
+ this.wolfBody.addBox(-4.0F, -2.0F, -3.0F, 6, 9, 6, f);
+ this.wolfBody.setRotationPoint(0.0F, 14.0F, 2.0F);
+ this.wolfMane = new ModelRenderer((ModelBase)this, 21, 0);
+ this.wolfMane.addBox(-4.0F, -3.0F, -3.0F, 8, 6, 7, f);
+ this.wolfMane.setRotationPoint(-1.0F, 14.0F, 2.0F);
+ this.wolfLeg1 = new ModelRenderer((ModelBase)this, 0, 18);
+ this.wolfLeg1.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f);
+ this.wolfLeg1.setRotationPoint(-2.5F, 16.0F, 7.0F);
+ this.wolfLeg2 = new ModelRenderer((ModelBase)this, 0, 18);
+ this.wolfLeg2.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f);
+ this.wolfLeg2.setRotationPoint(0.5F, 16.0F, 7.0F);
+ this.wolfLeg3 = new ModelRenderer((ModelBase)this, 0, 18);
+ this.wolfLeg3.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f);
+ this.wolfLeg3.setRotationPoint(-2.5F, 16.0F, -4.0F);
+ this.wolfLeg4 = new ModelRenderer((ModelBase)this, 0, 18);
+ this.wolfLeg4.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f);
+ this.wolfLeg4.setRotationPoint(0.5F, 16.0F, -4.0F);
+ this.wolfTail = new ModelRenderer((ModelBase)this, 9, 18);
+ this.wolfTail.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f);
+ this.wolfTail.setRotationPoint(-1.0F, 12.0F, 8.0F);
+ this.wolfHeadMain.setTextureOffset(16, 14).addBox(-3.0F, -5.0F, 0.0F, 2, 2, 1, f);
+ this.wolfHeadMain.setTextureOffset(16, 14).addBox(1.0F, -5.0F, 0.0F, 2, 2, 1, f);
+ this.wolfHeadMain.setTextureOffset(0, 10).addBox(-1.5F, 0.0F, -5.0F, 3, 3, 4, f);
+ }
+
+ public void render(Entity entityIn, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float scale) {
+ super.render(entityIn, p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, scale);
+ setRotationAngles(p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, scale, entityIn);
+ setLivingAnimations((EntityLivingBase)entityIn, p_78088_2_, p_78088_3_, 0.0F);
+ GlStateManager.translate(-1.0F, 0.0F, 0.0F);
+ this.wolfHeadMain.renderWithRotation(scale);
+ this.wolfBody.render(scale);
+ this.wolfLeg1.render(scale);
+ this.wolfLeg2.render(scale);
+ this.wolfLeg3.render(scale);
+ this.wolfLeg4.render(scale);
+ this.wolfTail.renderWithRotation(scale);
+ this.wolfMane.render(scale);
+ }
+
+ public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float p_78086_2_, float p_78086_3_, float partialTickTime) {
+ if (entitylivingbaseIn.isSneaking()) {
+ this.wolfMane.setRotationPoint(-1.0F, 16.0F, -3.0F);
+ this.wolfMane.rotateAngleX = 1.2566371F;
+ this.wolfMane.rotateAngleY = 0.0F;
+ this.wolfBody.setRotationPoint(0.0F, 18.0F, 0.0F);
+ this.wolfBody.rotateAngleX = 0.7853982F;
+ this.wolfTail.setRotationPoint(-1.0F, 21.0F, 6.0F);
+ this.wolfLeg1.setRotationPoint(-2.5F, 22.0F, 2.0F);
+ this.wolfLeg1.rotateAngleX = 4.712389F;
+ this.wolfLeg2.setRotationPoint(0.5F, 22.0F, 2.0F);
+ this.wolfLeg2.rotateAngleX = 4.712389F;
+ this.wolfLeg3.rotateAngleX = 5.811947F;
+ this.wolfLeg3.setRotationPoint(-2.49F, 17.0F, -4.0F);
+ this.wolfLeg4.rotateAngleX = 5.811947F;
+ this.wolfLeg4.setRotationPoint(0.51F, 17.0F, -4.0F);
+ } else {
+ this.wolfBody.setRotationPoint(0.0F, 14.0F, 2.0F);
+ this.wolfBody.rotateAngleX = 1.5707964F;
+ this.wolfMane.setRotationPoint(-1.0F, 14.0F, -3.0F);
+ this.wolfMane.rotateAngleX = this.wolfBody.rotateAngleX;
+ this.wolfTail.setRotationPoint(-1.0F, 12.0F, 8.0F);
+ this.wolfLeg1.setRotationPoint(-2.5F, 16.0F, 7.0F);
+ this.wolfLeg2.setRotationPoint(0.5F, 16.0F, 7.0F);
+ this.wolfLeg3.setRotationPoint(-2.5F, 16.0F, -4.0F);
+ this.wolfLeg4.setRotationPoint(0.5F, 16.0F, -4.0F);
+ this.wolfLeg1.rotateAngleX = MathHelper.cos(p_78086_2_ * 0.6662F) * 1.4F * p_78086_3_;
+ this.wolfLeg2.rotateAngleX = MathHelper.cos(p_78086_2_ * 0.6662F + 3.1415927F) * 1.4F * p_78086_3_;
+ this.wolfLeg3.rotateAngleX = MathHelper.cos(p_78086_2_ * 0.6662F + 3.1415927F) * 1.4F * p_78086_3_;
+ this.wolfLeg4.rotateAngleX = MathHelper.cos(p_78086_2_ * 0.6662F) * 1.4F * p_78086_3_;
+ }
+ }
+
+ public void setRotationAngles(float p_78087_1_, float p_78087_2_, float p_78087_3_, float p_78087_4_, float p_78087_5_, float p_78087_6_, Entity entityIn) {
+ super.setRotationAngles(p_78087_1_, p_78087_2_, p_78087_3_, p_78087_4_, p_78087_5_, p_78087_6_, entityIn);
+ this.wolfTail.rotateAngleX = p_78087_2_;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticEasterEgg.java b/src/minecraft/animeware/cosmetic/impl/CosmeticEasterEgg.java
new file mode 100644
index 0000000..f34a3eb
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticEasterEgg.java
@@ -0,0 +1,76 @@
+//
+// Decompiled by Procyon v0.5.36
+//
+
+package animeware.cosmetic.impl;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticBase;
+import animeware.cosmetic.CosmeticModelBase;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+public class CosmeticEasterEgg extends CosmeticBase
+{
+ private final CosmeticVilligerNose2 EggsModel;
+
+ public CosmeticEasterEgg(final RenderPlayer renderPlayer) {
+ super(renderPlayer);
+ this.EggsModel = new CosmeticVilligerNose2(renderPlayer);
+ }
+
+ @Override
+ public void render(final AbstractClientPlayer player, final float limbSwing, final float limbSwingAmount, final float partialTicks, final float ageInTicks, final float netHeadYaw, final float headPitch, final float scale) {
+ GL11.glPushMatrix();
+ if (player.isSneaking()) {
+ GlStateManager.translate(0.0, 0.262, 0.0);
+ }
+ GlStateManager.rotate(netHeadYaw, 0.0f, 1.0f, 0.0f);
+ GlStateManager.rotate(headPitch, 1.0f, 0.0f, 0.0f);
+ GlStateManager.rotate(ageInTicks * 17.0f, 0.0f, 1.0f, 0.0f);
+ GlStateManager.rotate(180.0f, 1.0f, 0.0f, 0.0f);
+ final String uuid = player.getUniqueID().toString();
+ if (uuid.contains("dwabdwbo8adb8wbdwa")) {
+ this.EggsModel.render(player, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale);
+ GL11.glColor3d(1.0, 1.0, 1.0);
+ }
+ Minecraft.getMinecraft();
+ if (player == Minecraft.thePlayer && Booleans.CosmeticEasterEggs) {
+ this.EggsModel.render(player, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale);
+ }
+ GL11.glPopMatrix();
+ }
+
+ public class CosmeticVilligerNose2 extends CosmeticModelBase
+ {
+ public CosmeticVilligerNose2(final RenderPlayer player) {
+ super(player);
+ }
+
+ @Override
+ public void render(final Entity entityIn, final float limbSwing, final float limbSwingAmount, final float ageInTicks, final float headYaw, final float headPitch, final float scale) {
+ final Minecraft mc = null;
+ GlStateManager.pushMatrix();
+ GlStateManager.scale(0.25, 0.25, 0.25);
+ GlStateManager.translate(2.0, 1.5, 0.0);
+ final ItemStack itemsword = new ItemStack(Items.egg);
+ Minecraft.getMinecraft().getItemRenderer().renderItem((EntityLivingBase)entityIn, itemsword, ItemCameraTransforms.TransformType.NONE);
+ GlStateManager.translate(-4.0f, 0.0f, 0.0f);
+ Minecraft.getMinecraft().getItemRenderer().renderItem((EntityLivingBase)entityIn, itemsword, ItemCameraTransforms.TransformType.NONE);
+ GlStateManager.translate(2.0f, 0.0f, 2.0f);
+ Minecraft.getMinecraft().getItemRenderer().renderItem((EntityLivingBase)entityIn, itemsword, ItemCameraTransforms.TransformType.NONE);
+ GlStateManager.translate(0.0f, 0.0f, -4.0f);
+ Minecraft.getMinecraft().getItemRenderer().renderItem((EntityLivingBase)entityIn, itemsword, ItemCameraTransforms.TransformType.NONE);
+ GlStateManager.popMatrix();
+ }
+ }
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticEnchantingGlint.java b/src/minecraft/animeware/cosmetic/impl/CosmeticEnchantingGlint.java
new file mode 100644
index 0000000..6061f23
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticEnchantingGlint.java
@@ -0,0 +1,89 @@
+package animeware.cosmetic.impl;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticController;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelBase;
+import net.minecraft.client.model.ModelPlayer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.client.renderer.entity.layers.LayerRenderer;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.util.ResourceLocation;
+
+
+public class CosmeticEnchantingGlint implements LayerRenderer
+{
+ protected static final ResourceLocation ENCHANTED_ITEM_GLINT_RES = new ResourceLocation("Animeware/cosmetic/enchantGlint.png");
+ private final RenderPlayer renderPlayer;
+ private final ModelPlayer playerModel;
+
+ public CosmeticEnchantingGlint(RenderPlayer renderPlayer)
+ {
+ this.renderPlayer = renderPlayer;
+ this.playerModel = new ModelPlayer(0.2F, false);
+ }
+
+ public void doRenderLayer(AbstractClientPlayer player, float p_177141_2_, float p_177141_3_, float partialTicks, float p_177141_5_, float p_177141_6_, float p_177141_7_, float scale)
+ {
+
+
+ if (player == Minecraft.getMinecraft().thePlayer && CosmeticController.shouldRenderTopHat(player) && Booleans.EnchantingGlint == true) {
+
+ this.createEnchantGlint(player, this.renderPlayer.getMainModel(), p_177141_2_, p_177141_3_, partialTicks, p_177141_5_, p_177141_6_, p_177141_7_, scale);
+ }
+
+
+
+
+
+ }
+
+ private void createEnchantGlint(EntityLivingBase entitylivingbaseIn, ModelBase modelbaseIn, float p_177183_3_, float p_177183_4_, float p_177183_5_, float p_177183_6_, float p_177183_7_, float p_177183_8_, float p_177183_9_)
+ {
+
+ float f = (float)entitylivingbaseIn.ticksExisted + p_177183_5_;
+ this.renderPlayer.bindTexture(ENCHANTED_ITEM_GLINT_RES);
+
+
+
+ GlStateManager.enableBlend();
+ GlStateManager.depthFunc(514);
+ GlStateManager.depthMask(false);
+ float f1 = 0.5F;
+ GlStateManager.color(f1, f1, f1, 1.0F);
+
+ for (int i = 0; i < 2; ++i)
+ {
+ GlStateManager.disableLighting();
+ GlStateManager.blendFunc(768, 1);
+ float f2 = 0.76F;
+ GlStateManager.color(0.5F * f2, 0.25F * f2, 0.8F * f2, 1.0F);
+ GlStateManager.matrixMode(5890);
+ GlStateManager.loadIdentity();
+ float f3 = 0.33333334F;
+ GlStateManager.scale(f3, f3, f3);
+ GlStateManager.rotate(30.0F - (float)i * 60.0F, 0.0F, 0.0F, 1.0F);
+ GlStateManager.translate(0.0F, f * (0.001F + (float)i * 0.003F) * 20.0F, 0.0F);
+ GlStateManager.matrixMode(5888);
+ modelbaseIn.render(entitylivingbaseIn, p_177183_3_, p_177183_4_, p_177183_6_, p_177183_7_, p_177183_8_, p_177183_9_);
+ }
+
+ GlStateManager.matrixMode(5890);
+ GlStateManager.loadIdentity();
+ GlStateManager.matrixMode(5888);
+ GlStateManager.enableLighting();
+ GlStateManager.depthMask(true);
+ GlStateManager.depthFunc(515);
+ GlStateManager.disableBlend();
+
+
+
+ }
+
+ public boolean shouldCombineTextures()
+ {
+ return false;
+ }
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticEnderCrystal.java b/src/minecraft/animeware/cosmetic/impl/CosmeticEnderCrystal.java
new file mode 100644
index 0000000..07ee4e1
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticEnderCrystal.java
@@ -0,0 +1,85 @@
+package animeware.cosmetic.impl;
+
+import java.util.Random;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.cosmetic.CosmeticBase;
+import animeware.cosmetic.CosmeticController;
+import animeware.cosmetic.CosmeticModelBase;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.Entity;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+
+public class CosmeticEnderCrystal extends CosmeticBase
+{
+ private static final ResourceLocation TEXTURE = new ResourceLocation("Animeware/cosmetic/endercrystal.png");
+ public int innerRotation;
+ private CosmeticEnderCrystal.EnderCrystalModel enderCrystalModel;
+
+ public CosmeticEnderCrystal(RenderPlayer player)
+ {
+ super(player);
+ this.enderCrystalModel = new CosmeticEnderCrystal.EnderCrystalModel(player);
+ this.innerRotation = (new Random()).nextInt(100000);
+ }
+
+ public void render(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale)
+ {
+
+
+
+ if (player == Minecraft.getMinecraft().thePlayer && CosmeticController.shouldRenderTopHat(player)) {
+ this.enderCrystalModel = new CosmeticEnderCrystal.EnderCrystalModel(this.renderPlayer);
+ ++this.innerRotation;
+ GlStateManager.pushMatrix();
+ this.renderPlayer.bindTexture(TEXTURE);
+
+ if (player.isSneaking()) {
+ GL11.glTranslated(0.0D, 0.3D, 0.0D);
+ }
+
+ GL11.glTranslated(0.0D, -0.9D, 0.0D);
+ float f = (float) this.innerRotation;
+ float f1 = MathHelper.sin(f * 0.2F) / 2.0F + 0.5F;
+ f1 = f1 * f1 + f1;
+ this.enderCrystalModel.render(player, 0.0F, f * 0.05F, f1 * 0.002F, 0.0F, 0.0F, 0.1F);
+ GL11.glPopMatrix();
+ }
+ }
+
+
+
+
+
+ public static class EnderCrystalModel extends CosmeticModelBase
+ {
+ ModelRenderer glass = new ModelRenderer(this, "glass");
+
+ public EnderCrystalModel(RenderPlayer player)
+ {
+ super(player);
+ this.glass.setTextureOffset(0, 0).addBox(-4.0F, -4.0F, -4.0F, 8, 8, 8);
+ }
+
+ public void render(Entity entityIn, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float scale)
+ {
+ GlStateManager.pushMatrix();
+ GlStateManager.rotate(p_78088_3_, 0.0F, 1.0F, 0.0F);
+ GlStateManager.translate(0.0F, 0.8F + p_78088_4_, 0.0F);
+ GlStateManager.rotate(60.0F, 0.7071F, 0.0F, 0.7071F);
+ this.glass.render(scale);
+ float f = 0.875F;
+ GlStateManager.scale(f, f, f);
+ GlStateManager.rotate(60.0F, 0.7071F, 0.0F, 0.7071F);
+ GlStateManager.rotate(p_78088_3_, 0.0F, 1.0F, 0.0F);
+ this.glass.render(scale);
+ GlStateManager.popMatrix();
+ }
+ }
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticGlasses.java b/src/minecraft/animeware/cosmetic/impl/CosmeticGlasses.java
new file mode 100644
index 0000000..6462bea
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticGlasses.java
@@ -0,0 +1,133 @@
+package animeware.cosmetic.impl;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticBase;
+import animeware.cosmetic.CosmeticModelBase;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.Entity;
+
+public class CosmeticGlasses extends CosmeticBase {
+ private final GlassesRenderer glassesModel;
+
+ public CosmeticGlasses(RenderPlayer renderPlayer) {
+ super(renderPlayer);
+ this.glassesModel = new GlassesRenderer(renderPlayer);
+ }
+
+ @Override
+ public void render(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float headYaw, float headPitch, float scale) {
+ GL11.glPushMatrix();
+ if(player.isSneaking()) {
+ GlStateManager.translate(0, 0.225, 0);
+ }
+ GlStateManager.rotate(headYaw, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(headPitch, 1.0F, 0.0F, 0.0F);
+
+ this.glassesModel.render(player, limbSwing, limbSwingAmount, ageInTicks, headYaw, headPitch, scale);
+ GL11.glPopMatrix();
+ }
+
+ public class GlassesRenderer extends CosmeticModelBase{
+
+ ModelRenderer Glasses1;
+ ModelRenderer Glasses2;
+ ModelRenderer Glasses3;
+ ModelRenderer Glasses4;
+ ModelRenderer Glasses5;
+ ModelRenderer Glasses6;
+ ModelRenderer Glasses7;
+ ModelRenderer Glasses8;
+ ModelRenderer Glasses9;
+
+ public GlassesRenderer(RenderPlayer player) {
+ super(player);
+ textureWidth = 64;
+ textureHeight = 32;
+
+ Glasses1 = new ModelRenderer(this, 0, 0);
+ Glasses1.addBox(0F, 0F, 0F, 4, 2, 1);
+ Glasses1.setRotationPoint(-5F, -3F, -5F);
+ Glasses1.setTextureSize(64, 32);
+ Glasses1.mirror = true;
+ setRotation(Glasses1, 0F, 0F, 0F);
+ Glasses2 = new ModelRenderer(this, 0, 0);
+ Glasses2.addBox(0F, 0F, 0F, 10, 1, 1);
+ Glasses2.setRotationPoint(-5F, -3F, -5F);
+ Glasses2.setTextureSize(64, 32);
+ Glasses2.mirror = true;
+ setRotation(Glasses2, 0F, 0F, 0F);
+ Glasses3 = new ModelRenderer(this, 0, 0);
+ Glasses3.addBox(0F, 0F, 0F, 4, 2, 1);
+ Glasses3.setRotationPoint(1F, -3F, -5F);
+ Glasses3.setTextureSize(64, 32);
+ Glasses3.mirror = true;
+ setRotation(Glasses3, 0F, 0F, 0F);
+ Glasses4 = new ModelRenderer(this, 0, 0);
+ Glasses4.addBox(-3F, 0F, -2F, 1, 1, 6);
+ Glasses4.setRotationPoint(-2F, -3F, -3F);
+ Glasses4.setTextureSize(64, 32);
+ Glasses4.mirror = true;
+ setRotation(Glasses4, 0F, 0F, 0F);
+ Glasses5 = new ModelRenderer(this, 0, 0);
+ Glasses5.addBox(0F, 0F, 0F, 1, 1, 6);
+ Glasses5.setRotationPoint(4F, -3F, -5F);
+ Glasses5.setTextureSize(64, 32);
+ Glasses5.mirror = true;
+ setRotation(Glasses5, 0F, 0F, 0F);
+ Glasses6 = new ModelRenderer(this, 0, 0);
+ Glasses6.addBox(0F, 0F, 0F, 1, 1, 1);
+ Glasses6.setRotationPoint(4F, -2F, 1F);
+ Glasses6.setTextureSize(64, 32);
+ Glasses6.mirror = true;
+ setRotation(Glasses6, 0F, 0F, 0F);
+ Glasses7 = new ModelRenderer(this, 0, 0);
+ Glasses7.addBox(0F, 0F, 0F, 1, 1, 1);
+ Glasses7.setRotationPoint(-5F, -2F, 1F);
+ Glasses7.setTextureSize(64, 32);
+ Glasses7.mirror = true;
+ setRotation(Glasses7, 0F, 0F, 0F);
+ Glasses8 = new ModelRenderer(this, 0, 0);
+ Glasses8.addBox(0F, 0F, 0F, 4, 2, 1);
+ Glasses8.setRotationPoint(-5F, -3F, -5F);
+ Glasses8.setTextureSize(64, 32);
+ Glasses8.mirror = true;
+ setRotation(Glasses8, 0F, 0F, 0F);
+ Glasses9 = new ModelRenderer(this, 0, 0);
+ Glasses9.addBox(1F, -3F, -5F, 4, 2, 1);
+ Glasses9.setRotationPoint(0F, 0F, 0F);
+ Glasses9.setTextureSize(64, 32);
+ Glasses9.mirror = true;
+ setRotation(Glasses9, 0F, 0F, 0F);
+ }
+
+ public void render(Entity entityIn, float limbSwing, float limbSwingAmout, float ageInTicks, float headYaw, float headPitch, float scale) {
+ if(Booleans.glasses && Minecraft.getMinecraft().thePlayer.getName().equals(Minecraft.getMinecraft().getSession().getUsername()) && entityIn == Minecraft.getMinecraft().thePlayer && !entityIn.isInvisible()) {
+ GlStateManager.pushMatrix();
+ GlStateManager.color(0, 0, 0);
+ Glasses1.render(scale);
+ Glasses2.render(scale);
+ Glasses3.render(scale);
+ Glasses4.render(scale);
+ Glasses5.render(scale);
+ Glasses6.render(scale);
+ Glasses7.render(scale);
+ Glasses8.render(scale);
+ Glasses9.render(scale);
+ GlStateManager.popMatrix();
+ }
+ }
+ }
+
+ private void setRotation(ModelRenderer model, float x, float y, float z)
+ {
+ model.rotateAngleX = x;
+ model.rotateAngleY = y;
+ model.rotateAngleZ = z;
+ }
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Bandana.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Bandana.java
new file mode 100644
index 0000000..6669590
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Bandana.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class Bandana extends CosmeticModule {
+
+ public Bandana() {
+ super("Bandana Cosmetic", new ResourceLocation("Animeware/icons/blank.png"), CosmeticType.BANDANA);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.Bandana = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.Bandana = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Blaze.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Blaze.java
new file mode 100644
index 0000000..8cb3c14
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Blaze.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class Blaze extends CosmeticModule {
+
+ public Blaze() {
+ super("Blaze Cosmetic", new ResourceLocation("Animeware/icons/blank.png"), CosmeticType.OTHER);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.Blaze = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.Blaze = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Cape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Cape.java
new file mode 100644
index 0000000..bbc588d
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Cape.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class Cape extends CosmeticModule {
+
+ public Cape() {
+ super("ZeroTwo Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.Cape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.Cape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/ChinaHatModule.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/ChinaHatModule.java
new file mode 100644
index 0000000..6acff51
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/ChinaHatModule.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class ChinaHatModule extends CosmeticModule {
+
+ public ChinaHatModule() {
+ super("ChinaHat", new ResourceLocation("Animeware/icons/blank.png"), CosmeticType.HAT);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.ChinaHat = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.ChinaHat = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/CosmeticEasterEggs.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/CosmeticEasterEggs.java
new file mode 100644
index 0000000..10f8002
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/CosmeticEasterEggs.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class CosmeticEasterEggs extends CosmeticModule {
+
+ public CosmeticEasterEggs() {
+ super("Cosmetic Eggs", new ResourceLocation("Animeware/icons/blank.png"), CosmeticType.OTHER);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.CosmeticEasterEggs = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.CosmeticEasterEggs = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/CosmeticWitchHat.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/CosmeticWitchHat.java
new file mode 100644
index 0000000..9819cd0
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/CosmeticWitchHat.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class CosmeticWitchHat extends CosmeticModule {
+
+ public CosmeticWitchHat() {
+ super("Witch Hat", new ResourceLocation("Animeware/icons/blank.png"), CosmeticType.HAT);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.CosmeticWitchHat = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.CosmeticWitchHat = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/CreeperLight.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/CreeperLight.java
new file mode 100644
index 0000000..2de95a6
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/CreeperLight.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class CreeperLight extends CosmeticModule {
+
+ public CreeperLight() {
+ super("Creeper Lightning Cosmetic", new ResourceLocation("Animeware/icons/blank.png"), CosmeticType.OTHER);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.CreeperLightning = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.CreeperLightning = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/CrystalWings.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/CrystalWings.java
new file mode 100644
index 0000000..30bd2b0
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/CrystalWings.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class CrystalWings extends CosmeticModule {
+
+ public CrystalWings() {
+ super("Crystal Wings", new ResourceLocation("Animeware/icons/blank.png"), CosmeticType.WINGS);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.CrystalWings = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.CrystalWings = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/DarkCape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/DarkCape.java
new file mode 100644
index 0000000..4115f29
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/DarkCape.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class DarkCape extends CosmeticModule {
+
+ public DarkCape() {
+ super("Dark Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.DarkCape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.DarkCape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/DevCape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/DevCape.java
new file mode 100644
index 0000000..80df85f
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/DevCape.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class DevCape extends CosmeticModule {
+
+ public DevCape() {
+ super("Staff Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.DevCape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.DevCape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/DragonWings.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/DragonWings.java
new file mode 100644
index 0000000..7c4fa92
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/DragonWings.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class DragonWings extends CosmeticModule {
+
+ public DragonWings() {
+ super("Dragon Wings", new ResourceLocation("Animeware/icons/blank.png"), CosmeticType.WINGS);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.CosmeticWings = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.CosmeticWings = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/EmeraldCape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/EmeraldCape.java
new file mode 100644
index 0000000..6e766d7
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/EmeraldCape.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class EmeraldCape extends CosmeticModule {
+
+ public EmeraldCape() {
+ super("Emerald Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.EmeraldCape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.EmeraldCape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/EnchGlint.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/EnchGlint.java
new file mode 100644
index 0000000..d2c64ee
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/EnchGlint.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class EnchGlint extends CosmeticModule {
+
+ public EnchGlint() {
+ super("Enchanting Glint Cosmetic", new ResourceLocation("Animeware/icons/blank.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.EnchantingGlint = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.EnchantingGlint = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/GalaxyWings.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/GalaxyWings.java
new file mode 100644
index 0000000..368a34f
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/GalaxyWings.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class GalaxyWings extends CosmeticModule {
+
+ public GalaxyWings() {
+ super("Galaxy Wings", new ResourceLocation("Animeware/icons/blank.png"), CosmeticType.WINGS);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.GalaxyWings = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.GalaxyWings = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Glasses.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Glasses.java
new file mode 100644
index 0000000..2ed49d7
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Glasses.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class Glasses extends CosmeticModule {
+
+ public Glasses() {
+ super("Glasses", new ResourceLocation("Animeware/icons/blank.png"), CosmeticType.OTHER);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.glasses = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.glasses = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/GradientBlack.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/GradientBlack.java
new file mode 100644
index 0000000..2581ce2
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/GradientBlack.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class GradientBlack extends CosmeticModule {
+
+ public GradientBlack() {
+ super("GradientBlack Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.GradientBlack = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.GradientBlack = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/GradientBlue.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/GradientBlue.java
new file mode 100644
index 0000000..c385442
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/GradientBlue.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class GradientBlue extends CosmeticModule {
+
+ public GradientBlue() {
+ super("GradientBlue Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.GradientBlue = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.GradientBlue = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/GradientGreen.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/GradientGreen.java
new file mode 100644
index 0000000..766bf6e
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/GradientGreen.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class GradientGreen extends CosmeticModule {
+
+ public GradientGreen() {
+ super("GradientGreen Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.GradientGreen = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.GradientGreen = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/GradientPurple.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/GradientPurple.java
new file mode 100644
index 0000000..f12dc94
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/GradientPurple.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class GradientPurple extends CosmeticModule {
+
+ public GradientPurple() {
+ super("GradientPurple Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.GradientPurple = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.GradientPurple = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/GradientRed.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/GradientRed.java
new file mode 100644
index 0000000..426a210
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/GradientRed.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class GradientRed extends CosmeticModule {
+
+ public GradientRed() {
+ super("GradientRed Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.GradientRed = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.GradientRed = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Halo.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Halo.java
new file mode 100644
index 0000000..9c0fd72
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Halo.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class Halo extends CosmeticModule {
+
+ public Halo() {
+ super("Halo", new ResourceLocation("Animeware/icons/blank.png"), CosmeticType.HAT);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.Halo = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.Halo = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/LCape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/LCape.java
new file mode 100644
index 0000000..6a71c1e
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/LCape.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class LCape extends CosmeticModule {
+
+ public LCape() {
+ super("L Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.LCape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.LCape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/NitroCape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/NitroCape.java
new file mode 100644
index 0000000..554ac63
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/NitroCape.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class NitroCape extends CosmeticModule {
+
+ public NitroCape() {
+ super("Nitro Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.NitroCape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.NitroCape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/OwnerCape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/OwnerCape.java
new file mode 100644
index 0000000..8e63904
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/OwnerCape.java
@@ -0,0 +1,26 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import animeware.util.websockets.SocketClient;
+import net.minecraft.util.ResourceLocation;
+
+public class OwnerCape extends CosmeticModule {
+
+ public OwnerCape() {
+ super("Owner Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.OwnerCape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.OwnerCape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/PlanetsCape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/PlanetsCape.java
new file mode 100644
index 0000000..b48a7de
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/PlanetsCape.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class PlanetsCape extends CosmeticModule {
+
+ public PlanetsCape() {
+ super("Planets Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.PlanetsCape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.PlanetsCape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/QuavCape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/QuavCape.java
new file mode 100644
index 0000000..9a10ede
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/QuavCape.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class QuavCape extends CosmeticModule {
+
+ public QuavCape() {
+ super("Quav Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.QuavCape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.QuavCape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/QuickCape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/QuickCape.java
new file mode 100644
index 0000000..67b8056
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/QuickCape.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class QuickCape extends CosmeticModule {
+
+ public QuickCape() {
+ super("Quick Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.QuickCape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.QuickCape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/ReptyllCape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/ReptyllCape.java
new file mode 100644
index 0000000..da0f667
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/ReptyllCape.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class ReptyllCape extends CosmeticModule {
+
+ public ReptyllCape() {
+ super("Reptyll Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.ReptyllCape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.ReptyllCape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/RetardEyes.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/RetardEyes.java
new file mode 100644
index 0000000..ba67985
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/RetardEyes.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class RetardEyes extends CosmeticModule {
+
+ public RetardEyes() {
+ super("Retard Eyes", new ResourceLocation("Animeware/icons/blank.png"), CosmeticType.OTHER);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.retardEyes = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.retardEyes = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/RinneCape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/RinneCape.java
new file mode 100644
index 0000000..72f7dce
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/RinneCape.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class RinneCape extends CosmeticModule {
+
+ public RinneCape() {
+ super("Rinnegan Cape - a", new ResourceLocation("Animeware/icons/blank.png"), CosmeticType.ANIM);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.RinneCape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.RinneCape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Sparkofyt.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Sparkofyt.java
new file mode 100644
index 0000000..30955a0
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Sparkofyt.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class Sparkofyt extends CosmeticModule {
+
+ public Sparkofyt() {
+ super("Sparkofyt cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.Sparkofyt = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.Sparkofyt = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Sparkofyt2.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Sparkofyt2.java
new file mode 100644
index 0000000..25f88e8
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/Sparkofyt2.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class Sparkofyt2 extends CosmeticModule {
+
+ public Sparkofyt2() {
+ super("Sparkofyt cape 2", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.Sparkofyt2 = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.Sparkofyt2 = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/SwordCape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/SwordCape.java
new file mode 100644
index 0000000..26e9cce
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/SwordCape.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class SwordCape extends CosmeticModule {
+
+ public SwordCape() {
+ super("Sword Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.SwordCape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.SwordCape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/WitherPet.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/WitherPet.java
new file mode 100644
index 0000000..404360c
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/WitherPet.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class WitherPet extends CosmeticModule {
+
+ public WitherPet() {
+ super("Wither Pet", new ResourceLocation("Animeware/icons/blank.png"), CosmeticType.PET);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.Witherpet = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.Witherpet = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/YTCape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/YTCape.java
new file mode 100644
index 0000000..cfc4ab3
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/YTCape.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class YTCape extends CosmeticModule {
+
+ public YTCape() {
+ super("YT Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.YTCape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.YTCape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/dseyes2cape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/dseyes2cape.java
new file mode 100644
index 0000000..29c9b04
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/dseyes2cape.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class dseyes2cape extends CosmeticModule {
+
+ public dseyes2cape() {
+ super("Demon eyes Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.dseyes2cape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.dseyes2cape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/dseyescape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/dseyescape.java
new file mode 100644
index 0000000..570e54d
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/dseyescape.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class dseyescape extends CosmeticModule {
+
+ public dseyescape() {
+ super("Demon eyes Cape 2", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.dseyescape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.dseyescape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/kocho2cape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/kocho2cape.java
new file mode 100644
index 0000000..2e526d6
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/kocho2cape.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class kocho2cape extends CosmeticModule {
+
+ public kocho2cape() {
+ super("Kocho Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.kocho2cape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.kocho2cape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/kocho3cape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/kocho3cape.java
new file mode 100644
index 0000000..1a72156
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/kocho3cape.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class kocho3cape extends CosmeticModule {
+
+ public kocho3cape() {
+ super("Kocho Cape 2", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.kocho3cape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.kocho3cape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticMods/tanjirocape.java b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/tanjirocape.java
new file mode 100644
index 0000000..3a63382
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticMods/tanjirocape.java
@@ -0,0 +1,25 @@
+package animeware.cosmetic.impl.CosmeticMods;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class tanjirocape extends CosmeticModule {
+
+ public tanjirocape() {
+ super("tanjiro Cape", new ResourceLocation("Animeware/icons/cape.png"), CosmeticType.CAPE);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.tanjirocape = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.tanjirocape = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticSheepWool.java b/src/minecraft/animeware/cosmetic/impl/CosmeticSheepWool.java
new file mode 100644
index 0000000..45f4705
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticSheepWool.java
@@ -0,0 +1,41 @@
+package animeware.cosmetic.impl;
+
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelPlayer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.client.renderer.entity.layers.LayerRenderer;
+import net.minecraft.util.ResourceLocation;
+
+public class CosmeticSheepWool implements LayerRenderer {
+ private static final ResourceLocation TEXTURE = new ResourceLocation("textures/entity/sheep/sheep_fur.png");
+ private final RenderPlayer playerrenderer;
+ private final ModelPlayer sheepModel;
+
+ public CosmeticSheepWool(RenderPlayer player, ModelPlayer sheepModel) {
+ this.playerrenderer = player;
+ this.sheepModel = sheepModel;
+ }
+
+ @Override
+ public void doRenderLayer(AbstractClientPlayer entitylivingbaseIn, float p_177141_2_, float p_177141_3_, float partialTicks, float p_177141_5_, float p_177141_6_, float p_177141_7_, float scale) {
+ if (!entitylivingbaseIn.isInvisible())
+ {
+ this.playerrenderer.bindTexture(TEXTURE);
+
+
+ //float[] afloat = EntitySheep.func_175513_a(RenderSheep.getFleeceColor());
+ GlStateManager.color(1, 0,1);
+
+
+ //this.sheepModel.setModelAttributes(this.playerrenderer.getMainModel());
+ //this.sheepModel.setLivingAnimations(entitylivingbaseIn, p_177141_2_, p_177141_3_, partialTicks);
+ //this.sheepModel.render(entitylivingbaseIn, 1, 2, 3,4, 5, 1);
+ }
+ }
+
+ @Override
+ public boolean shouldCombineTextures() {
+ return false;
+ }
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticSusanno.java b/src/minecraft/animeware/cosmetic/impl/CosmeticSusanno.java
new file mode 100644
index 0000000..1dd9dcb
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticSusanno.java
@@ -0,0 +1,248 @@
+package animeware.cosmetic.impl;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.cosmetic.CosmeticBase;
+import animeware.cosmetic.CosmeticController;
+import animeware.cosmetic.CosmeticModelBase;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.Entity;
+import net.minecraft.util.ResourceLocation;
+
+public class CosmeticSusanno extends CosmeticBase
+{
+ private static final ResourceLocation susanno = new ResourceLocation("Animeware/cosmetic/susanno.png");
+ private final CosmeticSusanno.SusannoModel susannoModel;
+
+ public CosmeticSusanno(RenderPlayer player)
+ {
+ super(player);
+ this.susannoModel = new CosmeticSusanno.SusannoModel(player);
+ }
+
+ public void render(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale)
+ {
+
+
+
+
+ if (player == Minecraft.getMinecraft().thePlayer && CosmeticController.shouldRenderTopHat(player)) {
+ GlStateManager.pushMatrix();
+
+ this.renderPlayer.bindTexture(susanno);
+ GlStateManager.enableBlend();
+
+ GlStateManager.color(1,0,1);
+
+ GlStateManager.blendFunc(77, 77);
+ this.susannoModel.render(player, limbSwing, limbSwingAmount, ageInTicks, headPitch, headPitch, scale);
+
+ GL11.glPopMatrix();
+ }
+
+
+
+ }
+
+
+ public static class SusannoModel extends CosmeticModelBase
+ {
+ ModelRenderer leftRib12;
+ ModelRenderer leftRib22;
+ ModelRenderer leftRib32;
+ ModelRenderer leftRib42;
+ ModelRenderer rightRib12;
+ ModelRenderer rightRib22;
+ ModelRenderer rightRib32;
+ ModelRenderer rightRib42;
+ ModelRenderer Spine;
+ ModelRenderer leftRib41;
+ ModelRenderer rightRib41;
+ ModelRenderer leftRib31;
+ ModelRenderer leftRib21;
+ ModelRenderer leftRib11;
+ ModelRenderer rightRib31;
+ ModelRenderer rightRib21;
+ ModelRenderer rightRib11;
+ ModelRenderer leftRib43;
+ ModelRenderer leftRib33;
+ ModelRenderer leftRib23;
+ ModelRenderer leftRib13;
+ ModelRenderer rightRib43;
+ ModelRenderer rightRib33;
+ ModelRenderer rightRib23;
+ ModelRenderer rightRib13;
+
+ public SusannoModel(RenderPlayer player)
+ {
+ super(player);
+ this.textureWidth = 128;
+ this.textureHeight = 64;
+ (this.leftRib12 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 1, 3, 10);
+ this.leftRib12.setRotationPoint(9.0F, 18.0F, -5.0F);
+ this.leftRib12.setTextureSize(64, 32);
+ this.leftRib12.mirror = true;
+ this.setRotation(this.leftRib12, 0.0F, 0.0F, 0.0F);
+ (this.leftRib22 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 1, 3, 14);
+ this.leftRib22.setRotationPoint(11.0F, 10.0F, -7.0F);
+ this.leftRib22.setTextureSize(64, 32);
+ this.leftRib22.mirror = true;
+ this.setRotation(this.leftRib22, 0.0F, 0.0F, 0.0F);
+ (this.leftRib32 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 1, 3, 14);
+ this.leftRib32.setRotationPoint(11.0F, 2.0F, -7.0F);
+ this.leftRib32.setTextureSize(64, 32);
+ this.leftRib32.mirror = true;
+ this.setRotation(this.leftRib32, 0.0F, 0.0F, 0.0F);
+ (this.leftRib42 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 1, 3, 10);
+ this.leftRib42.setRotationPoint(9.0F, -5.0F, -5.0F);
+ this.leftRib42.setTextureSize(64, 32);
+ this.leftRib42.mirror = true;
+ this.setRotation(this.leftRib42, 0.0F, 0.0F, 0.0F);
+ (this.rightRib12 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 1, 3, 10);
+ this.rightRib12.setRotationPoint(-10.0F, 18.0F, -5.0F);
+ this.rightRib12.setTextureSize(64, 32);
+ this.rightRib12.mirror = true;
+ this.setRotation(this.rightRib12, 0.0F, 0.0F, 0.0F);
+ (this.rightRib22 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 1, 3, 14);
+ this.rightRib22.setRotationPoint(-12.0F, 10.0F, -7.0F);
+ this.rightRib22.setTextureSize(64, 32);
+ this.rightRib22.mirror = true;
+ this.setRotation(this.rightRib22, 0.0F, 0.0F, 0.0F);
+ (this.rightRib32 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 1, 3, 14);
+ this.rightRib32.setRotationPoint(-12.0F, 2.0F, -7.0F);
+ this.rightRib32.setTextureSize(64, 32);
+ this.rightRib32.mirror = true;
+ this.setRotation(this.rightRib32, 0.0F, 0.0F, 0.0F);
+ (this.rightRib42 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 1, 3, 10);
+ this.rightRib42.setRotationPoint(-10.0F, -5.0F, -5.0F);
+ this.rightRib42.setTextureSize(64, 32);
+ this.rightRib42.mirror = true;
+ this.setRotation(this.rightRib42, 0.0F, 0.0F, 0.0F);
+ (this.Spine = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 4, 26, 3);
+ this.Spine.setRotationPoint(-2.0F, -5.0F, 9.0F);
+ this.Spine.setTextureSize(64, 32);
+ this.Spine.mirror = true;
+ this.setRotation(this.Spine, 0.0F, 0.0F, 0.0F);
+ (this.leftRib41 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 10, 3, 1);
+ this.leftRib41.setRotationPoint(1.5F, -5.0F, 10.3F);
+ this.leftRib41.setTextureSize(64, 32);
+ this.leftRib41.mirror = true;
+ this.setRotation(this.leftRib41, 0.0F, 0.6632251F, 0.0F);
+ (this.rightRib41 = new ModelRenderer(this, 0, 0)).addBox(-10.0F, 0.0F, 0.0F, 10, 3, 1);
+ this.rightRib41.setRotationPoint(-1.6F, -5.0F, 10.5F);
+ this.rightRib41.setTextureSize(64, 32);
+ this.rightRib41.mirror = true;
+ this.setRotation(this.rightRib41, 0.0F, -0.6894051F, 0.0F);
+ (this.leftRib31 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 11, 3, 1);
+ this.leftRib31.setRotationPoint(1.3F, 2.0F, 10.0F);
+ this.leftRib31.setTextureSize(64, 32);
+ this.leftRib31.mirror = true;
+ this.setRotation(this.leftRib31, 0.0F, 0.3665191F, 0.0F);
+ (this.leftRib21 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 11, 3, 1);
+ this.leftRib21.setRotationPoint(1.3F, 10.0F, 10.0F);
+ this.leftRib21.setTextureSize(64, 32);
+ this.leftRib21.mirror = true;
+ this.setRotation(this.leftRib21, 0.0F, 0.3665191F, 0.0F);
+ (this.leftRib11 = new ModelRenderer(this, 0, 0)).addBox(0.0F, -1.0F, 0.0F, 10, 3, 1);
+ this.leftRib11.setRotationPoint(1.5F, 19.0F, 10.3F);
+ this.leftRib11.setTextureSize(64, 32);
+ this.leftRib11.mirror = true;
+ this.setRotation(this.leftRib11, 0.0F, 0.6632251F, 0.0F);
+ (this.rightRib31 = new ModelRenderer(this, 0, 0)).addBox(-11.0F, 0.0F, 0.0F, 11, 3, 1);
+ this.rightRib31.setRotationPoint(-1.3F, 2.0F, 10.0F);
+ this.rightRib31.setTextureSize(64, 32);
+ this.rightRib31.mirror = true;
+ this.setRotation(this.rightRib31, 0.0F, -0.3665191F, 0.0F);
+ (this.rightRib21 = new ModelRenderer(this, 0, 0)).addBox(-11.0F, 0.0F, 0.0F, 11, 3, 1);
+ this.rightRib21.setRotationPoint(-1.3F, 10.0F, 10.0F);
+ this.rightRib21.setTextureSize(64, 32);
+ this.rightRib21.mirror = true;
+ this.setRotation(this.rightRib21, 0.0F, -0.3665191F, 0.0F);
+ (this.rightRib11 = new ModelRenderer(this, 0, 0)).addBox(-10.0F, 0.0F, 0.0F, 10, 3, 1);
+ this.rightRib11.setRotationPoint(-1.6F, 18.0F, 10.5F);
+ this.rightRib11.setTextureSize(64, 32);
+ this.rightRib11.mirror = true;
+ this.setRotation(this.rightRib11, 0.0F, -0.6894051F, 0.0F);
+ (this.leftRib43 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 7, 3, 1);
+ this.leftRib43.setRotationPoint(4.6F, -5.0F, -9.5F);
+ this.leftRib43.setTextureSize(64, 32);
+ this.leftRib43.mirror = true;
+ this.setRotation(this.leftRib43, 0.0F, -0.6894051F, 0.0F);
+ (this.leftRib33 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 7, 3, 1);
+ this.leftRib33.setRotationPoint(6.5F, 2.0F, -11.4F);
+ this.leftRib33.setTextureSize(64, 32);
+ this.leftRib33.mirror = true;
+ this.setRotation(this.leftRib33, 0.0F, -0.6894051F, 0.0F);
+ (this.leftRib23 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 7, 3, 1);
+ this.leftRib23.setRotationPoint(6.5F, 10.0F, -11.4F);
+ this.leftRib23.setTextureSize(64, 32);
+ this.leftRib23.mirror = true;
+ this.setRotation(this.leftRib23, 0.0F, -0.6894051F, 0.0F);
+ (this.leftRib13 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 7, 3, 1);
+ this.leftRib13.setRotationPoint(4.6F, 18.0F, -9.5F);
+ this.leftRib13.setTextureSize(64, 32);
+ this.leftRib13.mirror = true;
+ this.setRotation(this.leftRib13, 0.0F, -0.6894051F, 0.0F);
+ (this.rightRib43 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 7, 3, 1);
+ this.rightRib43.setRotationPoint(-10.0F, -5.0F, -5.0F);
+ this.rightRib43.setTextureSize(64, 32);
+ this.rightRib43.mirror = true;
+ this.setRotation(this.rightRib43, 0.0F, 0.6632251F, 0.0F);
+ (this.rightRib33 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 7, 3, 1);
+ this.rightRib33.setRotationPoint(-12.0F, 2.0F, -7.0F);
+ this.rightRib33.setTextureSize(64, 32);
+ this.rightRib33.mirror = true;
+ this.setRotation(this.rightRib33, 0.0F, 0.6632251F, 0.0F);
+ (this.rightRib23 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 7, 3, 1);
+ this.rightRib23.setRotationPoint(-12.0F, 10.0F, -7.0F);
+ this.rightRib23.setTextureSize(64, 32);
+ this.rightRib23.mirror = true;
+ this.setRotation(this.rightRib23, 0.0F, 0.6632251F, 0.0F);
+ (this.rightRib13 = new ModelRenderer(this, 0, 0)).addBox(0.0F, 0.0F, 0.0F, 7, 3, 1);
+ this.rightRib13.setRotationPoint(-10.0F, 18.0F, -5.0F);
+ this.rightRib13.setTextureSize(64, 32);
+ this.rightRib13.mirror = true;
+ this.setRotation(this.rightRib13, 0.0F, 0.6632251F, 0.0F);
+ }
+
+ private void setRotation(ModelRenderer model, float x, float y, float z)
+ {
+ model.rotateAngleX = x;
+ model.rotateAngleY = y;
+ model.rotateAngleZ = z;
+ }
+
+ public void render(Entity entityIn, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float scale)
+ {
+ this.leftRib12.render(scale);
+ this.leftRib22.render(scale);
+ this.leftRib32.render(scale);
+ this.leftRib42.render(scale);
+ this.rightRib12.render(scale);
+ this.rightRib22.render(scale);
+ this.rightRib32.render(scale);
+ this.rightRib42.render(scale);
+ this.Spine.render(scale);
+ this.leftRib41.render(scale);
+ this.rightRib41.render(scale);
+ this.leftRib31.render(scale);
+ this.leftRib21.render(scale);
+ this.leftRib11.render(scale);
+ this.rightRib31.render(scale);
+ this.rightRib21.render(scale);
+ this.rightRib11.render(scale);
+ this.leftRib43.render(scale);
+ this.leftRib33.render(scale);
+ this.leftRib23.render(scale);
+ this.leftRib13.render(scale);
+ this.rightRib43.render(scale);
+ this.rightRib33.render(scale);
+ this.rightRib23.render(scale);
+ this.rightRib13.render(scale);
+ }
+ }
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticSusanoo.java b/src/minecraft/animeware/cosmetic/impl/CosmeticSusanoo.java
new file mode 100644
index 0000000..6453f32
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticSusanoo.java
@@ -0,0 +1,143 @@
+package animeware.cosmetic.impl;
+
+import animeware.NightSky;
+import animeware.cosmetic.CosmeticChecker;
+import animeware.cosmetic.CosmeticBase;
+import animeware.cosmetic.CosmeticModelBase;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.entity.EntityPlayerSP;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.Entity;
+
+
+
+
+public class CosmeticSusanoo extends CosmeticBase {
+ private final NAME2 nameModel;
+
+ public CosmeticSusanoo(RenderPlayer renderPlayer) {
+ super(renderPlayer);
+ this.nameModel = new NAME2(renderPlayer);
+ }
+
+ public void render(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) {
+
+ GlStateManager.pushMatrix();
+ GlStateManager.color(1, 0, 0);
+ GlStateManager.disableLighting();
+ GlStateManager.blendFunc(1, 1);
+ GlStateManager.enableBlend();
+ if(player.isSneaking()) {
+ GlStateManager.rotate(20, 1, 0, 0);
+ GlStateManager.translate(0, 0.20, -0.05);
+ }
+ GlStateManager.translate(0, -0.2, 0);
+
+
+ String uuid = player.getUniqueID().toString();
+ if(uuid.contains("dwjandowpiahnbdwoiuadw")) {
+ this.nameModel.render((Entity)player, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale);
+ GlStateManager.color(1, 1, 1);
+ }
+ //if(Animeware.Susanoo && CapeChecker.ownsZeroTwoCape(player) && player instanceof EntityPlayerSP) {
+ GlStateManager.disableColorMaterial();
+ GlStateManager.color(255, 0, 0);
+ this.nameModel.render((Entity)player, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale);
+ //}
+ GlStateManager.enableLighting();
+ GlStateManager.enableLighting();
+ GlStateManager.enableColorMaterial();
+ GlStateManager.disableBlend();
+ GlStateManager.popMatrix();
+ }
+ class NAME2 extends CosmeticModelBase {
+ ModelRenderer Back;
+ ModelRenderer upperlane;
+ ModelRenderer upperlaneonedown;
+ ModelRenderer upperlanetwodown;
+ ModelRenderer left1;
+ ModelRenderer left2;
+ ModelRenderer left3;
+ ModelRenderer right1;
+ ModelRenderer right2;
+ ModelRenderer right3;
+
+ public NAME2(RenderPlayer player) {
+ super(player);
+ textureWidth = 0;
+ textureHeight = 0;
+ Back = new ModelRenderer(this, 0, 0);
+ Back.addBox(0F, 0F, 0F, 2, 15, 1);
+ Back.setRotationPoint(-1F, 0F, 6F);
+ Back.setTextureSize(64, 32);
+ Back.mirror = true;
+ upperlane = new ModelRenderer(this, 0, 0);
+ upperlane.addBox(0F, 0F, 0F, 22, 1, 1);
+ upperlane.setRotationPoint(-11F, 3F, 6F);
+ upperlane.setTextureSize(64, 32);
+ upperlane.mirror = true;
+ upperlaneonedown = new ModelRenderer(this, 0, 0);
+ upperlaneonedown.addBox(0F, 0F, 0F, 22, 1, 1);
+ upperlaneonedown.setRotationPoint(-11F, 6F, 6F);
+ upperlaneonedown.setTextureSize(64, 32);
+ upperlaneonedown.mirror = true;
+ upperlanetwodown = new ModelRenderer(this, 0, 0);
+ upperlanetwodown.addBox(0F, 0F, 0F, 22, 1, 1);
+ upperlanetwodown.setRotationPoint(-11F, 10F, 6F);
+ upperlanetwodown.setTextureSize(64, 32);
+ upperlanetwodown.mirror = true;
+ left1 = new ModelRenderer(this, 0, 0);
+ left1.addBox(0F, 0F, 0F, 1, 1, 9);
+ left1.setRotationPoint(10F, 3F, -3F);
+ left1.setTextureSize(64, 32);
+ left1.mirror = true;
+ left2 = new ModelRenderer(this, 0, 0);
+ left2.addBox(0F, 0F, 0F, 1, 1, 9);
+ left2.setRotationPoint(10F, 6F, -3F);
+ left2.setTextureSize(64, 32);
+ left2.mirror = true;
+ left3 = new ModelRenderer(this, 0, 0);
+ left3.addBox(0F, 0F, 0F, 1, 1, 9);
+ left3.setRotationPoint(10F, 10F, -3F);
+ left3.setTextureSize(64, 32);
+ left3.mirror = true;
+ right1 = new ModelRenderer(this, 0, 0);
+ right1.addBox(0F, 0F, 0F, 1, 1, 9);
+ right1.setRotationPoint(-11F, 3F, -3F);
+ right1.setTextureSize(64, 32);
+ right1.mirror = true;
+ right2 = new ModelRenderer(this, 0, 0);
+ right2.addBox(0F, 0F, 0F, 1, 1, 9);
+ right2.setRotationPoint(-11F, 6F, -3F);
+ right2.setTextureSize(64, 32);
+ right2.mirror = true;
+ right3 = new ModelRenderer(this, 0, 0);
+ right3.addBox(0F, 0F, 0F, 1, 1, 9);
+ right3.setRotationPoint(-11F, 10F, -3F);
+ right3.setTextureSize(64, 32);
+ right3.mirror = true;
+
+
+ }
+
+ public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float headYaw, float headPitch, float scale) {
+ GlStateManager.pushMatrix();
+ this.Back.render(scale);
+ this.right1.render(scale);
+ this.right2.render(scale);
+ this.right3.render(scale);
+ this.upperlane.render(scale);
+ this.upperlaneonedown.render(scale);
+ this.upperlanetwodown.render(scale);
+ this.left1.render(scale);
+ this.left2.render(scale);
+ this.left3.render(scale);
+
+ GlStateManager.popMatrix();
+
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticWings.java b/src/minecraft/animeware/cosmetic/impl/CosmeticWings.java
new file mode 100644
index 0000000..7e5dcfe
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticWings.java
@@ -0,0 +1,100 @@
+package animeware.cosmetic.impl;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.cosmetic.Booleans;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelBase;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.client.renderer.entity.layers.LayerRenderer;
+import net.minecraft.util.ResourceLocation;
+
+public class CosmeticWings extends ModelBase implements LayerRenderer {
+
+
+ private final RenderPlayer playerRenderer;
+
+ private Minecraft mc;
+
+ private ResourceLocation location;
+
+ private ModelRenderer wing;
+
+ private ModelRenderer wingTip;
+
+ private boolean playerUsesFullHeight;
+
+ public CosmeticWings(RenderPlayer playerRendererIn) {
+
+ this.playerRenderer = playerRendererIn;
+ this.mc = Minecraft.getMinecraft();
+ this.location = new ResourceLocation("Animeware/cosmetic/wings.png");
+ setTextureOffset("wing.bone", 0, 0);
+ setTextureOffset("wing.skin", -10, 8);
+ setTextureOffset("wingtip.bone", 0, 5);
+ setTextureOffset("wingtip.skin", -10, 18);
+ this.wing = new ModelRenderer(this, "wing");
+ this.wing.setTextureSize(30, 30);
+ this.wing.setRotationPoint(-2.0F, 0.0F, 0.0F);
+ this.wing.addBox("bone", -10.0F, -1.0F, -1.0F, 10, 2, 2);
+ this.wing.addBox("skin", -10.0F, 0.0F, 0.5F, 10, 0, 10);
+ this.wingTip = new ModelRenderer(this, "wingtip");
+ this.wingTip.setTextureSize(30, 30);
+ this.wingTip.setRotationPoint(-10.0F, 0.0F, 0.0F);
+ this.wingTip.addBox("bone", -10.0F, -0.5F, -0.5F, 10, 1, 1);
+ this.wingTip.addBox("skin", -10.0F, 0.0F, 0.5F, 10, 0, 10);
+ this.wing.addChild(this.wingTip);
+ }
+
+ private float interpolate(float yaw1, float yaw2, float percent) {
+ float f = (yaw1 + (yaw2 - yaw1) * percent) % 360.0F;
+ if (f < 1.0F)
+ f += 360.0F;
+ return f;
+ }
+
+ @Override
+ public void doRenderLayer(AbstractClientPlayer entitylivingbaseIn, float p_177141_2_, float p_177141_3_,
+ float partialTicks, float p_177141_5_, float p_177141_6_, float p_177141_7_, float scalee) {
+
+ if (entitylivingbaseIn == Minecraft.getMinecraft().thePlayer && !entitylivingbaseIn.isInvisible() && Booleans.CosmeticWings) {
+ double rotate = interpolate(entitylivingbaseIn.prevRenderYawOffset, entitylivingbaseIn.renderYawOffset, partialTicks);
+ GL11.glPushMatrix();
+ GL11.glScaled(-0.6, -0.6, 0.6);
+ GL11.glTranslated(0.0D, -1.45, 0.1D);
+ GL11.glTranslated(0.0D, 1.3D, 0.2D);
+ if (entitylivingbaseIn.isSneaking()) {
+ GlStateManager.translate(0.0F, -0.142F, -0.0178F);
+ }
+ GL11.glRotated(130, 1, 0, 0);
+ GL11.glRotated(180, 0, 1, 0);
+
+ GL11.glColor3f(1, 1, 1);
+ this.mc.getTextureManager().bindTexture(this.location);
+ for (int j = 0; j < 2; j++) {
+ GL11.glEnable(2884);
+ float f11 = (float) (System.currentTimeMillis() % 1000L) / 1000.0F * 3.1415927F * 2.0F;
+ this.wing.rotateAngleX = (float) Math.toRadians(-80.0D) - (float) Math.cos(f11) * 0.2F;
+ this.wing.rotateAngleY = (float) Math.toRadians(20.0D) + (float) Math.sin(f11) * 0.4F;
+ this.wing.rotateAngleZ = (float) Math.toRadians(20.0D);
+ this.wingTip.rotateAngleZ = -((float) (Math.sin((f11 + 2.0F)) + 0.5D)) * 0.95F;
+ this.wing.render(0.0625F);
+ GL11.glScalef(-1.0F, 1.0F, 1.0F);
+ if (j == 0)
+ GL11.glCullFace(1028);
+ }
+ GL11.glCullFace(1029);
+ GL11.glDisable(2884);
+ GL11.glColor3f(255.0F, 255.0F, 255.0F);
+ GL11.glPopMatrix();
+ }
+ }
+
+ @Override
+ public boolean shouldCombineTextures() {
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticWitchHat.java b/src/minecraft/animeware/cosmetic/impl/CosmeticWitchHat.java
new file mode 100644
index 0000000..0185530
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticWitchHat.java
@@ -0,0 +1,103 @@
+package animeware.cosmetic.impl;
+
+import java.io.IOException;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticBase;
+import animeware.cosmetic.CosmeticModelBase;
+import animeware.util.DatabaseUtil;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelBase;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.Entity;
+import net.minecraft.util.ResourceLocation;
+
+
+
+public class CosmeticWitchHat extends CosmeticBase {
+ private final HatModel hatModel;
+
+ private static final ResourceLocation TEXTURE = new ResourceLocation("Animeware/cosmetic/HexenHut.png");
+ public CosmeticWitchHat(RenderPlayer renderPlayer) {
+ super(renderPlayer);
+ this.hatModel = new HatModel(renderPlayer);
+ }
+
+ public void render(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) {
+
+ GL11.glPushMatrix();
+
+ if(player.isSneaking()) {
+ GlStateManager.translate(0, 0.262, 0);
+ }
+ GlStateManager.rotate(netHeadYaw, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(headPitch, 1.0F, 0.0F, 0.0F);
+ GlStateManager.translate(-0.3125, -0.55, -0.3125);
+ this.renderPlayer.bindTexture(TEXTURE);
+ if(Booleans.CosmeticWitchHat && player == Minecraft.getMinecraft().thePlayer) {
+ this.hatModel.render((Entity)player, limbSwing, limbSwingAmount, ageInTicks, headPitch, headPitch, scale);
+ GL11.glColor3d(1, 1, 1);
+ }
+ String uuid = player.getUniqueID().toString();
+ try {
+ if(uuid.contains("dwaodbwabdwo8ad")) {
+
+ GL11.glColor3d(DatabaseUtil.getDouble(uuid, "hat-r"), DatabaseUtil.getDouble(uuid, "hat-g"), DatabaseUtil.getDouble(uuid, "hat-b"));
+ this.hatModel.render((Entity)player, limbSwing, limbSwingAmount, ageInTicks, headPitch, headPitch, scale);
+ GL11.glColor3d(1, 1, 1);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+
+ GL11.glColor3f(1.0F, 1.0F, 1.0F);
+ GL11.glPopMatrix();
+ }
+
+ }
+
+ class HatModel extends CosmeticModelBase {
+
+ private ModelRenderer witchHat;
+
+ public HatModel(RenderPlayer player) {
+ super(player);
+
+ this.witchHat = (new ModelRenderer((ModelBase)this)).setTextureSize(64, 128);
+ this.witchHat.setTextureOffset(0, 64).addBox(0.0F, 0.0F, 0.0F, 10, 2, 10);
+ ModelRenderer modelrenderer = (new ModelRenderer((ModelBase)this)).setTextureSize(64, 128);
+ modelrenderer.setRotationPoint(1.75F, -4.0F, 2.0F);
+ modelrenderer.setTextureOffset(0, 76).addBox(0.0F, 0.0F, 0.0F, 7, 4, 7);
+ modelrenderer.rotateAngleX = -0.05235988F;
+ modelrenderer.rotateAngleZ = 0.02617994F;
+ this.witchHat.addChild(modelrenderer);
+ ModelRenderer modelrenderer1 = (new ModelRenderer((ModelBase)this)).setTextureSize(64, 128);
+ modelrenderer1.setRotationPoint(1.75F, -4.0F, 2.0F);
+ modelrenderer1.setTextureOffset(0, 87).addBox(0.0F, 0.0F, 0.0F, 4, 4, 4);
+ modelrenderer1.rotateAngleX = -0.10471976F;
+ modelrenderer1.rotateAngleZ = 0.05235988F;
+ modelrenderer.addChild(modelrenderer1);
+ ModelRenderer modelrenderer2 = (new ModelRenderer((ModelBase)this)).setTextureSize(64, 128);
+ modelrenderer2.setRotationPoint(1.75F, -2.0F, 2.0F);
+ modelrenderer2.setTextureOffset(0, 95).addBox(0.0F, 0.0F, 0.0F, 1, 2, 1, 0.25F);
+ modelrenderer2.rotateAngleX = -0.20943952F;
+ modelrenderer2.rotateAngleZ = 0.10471976F;
+ modelrenderer1.addChild(modelrenderer2);
+ }
+
+ public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float headYaw, float headPitch, float scale) {
+
+ final ResourceLocation TEXTURE = new ResourceLocation("Animeware/cosmetic/HexenHut.png");
+ Minecraft.getMinecraft().getTextureManager().bindTexture(TEXTURE);
+ this.witchHat.render(scale);
+
+
+ }
+ }
+
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticWither.java b/src/minecraft/animeware/cosmetic/impl/CosmeticWither.java
new file mode 100644
index 0000000..4345477
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticWither.java
@@ -0,0 +1,58 @@
+package animeware.cosmetic.impl;
+
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelBase;
+import net.minecraft.client.model.ModelPlayer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.client.renderer.entity.layers.LayerRenderer;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+
+
+public class CosmeticWither implements LayerRenderer{
+ private static final ResourceLocation WITHER_ARMOR = new ResourceLocation("textures/entity/wither/wither_armor.png");
+
+ private final RenderPlayer witherRenderer;
+
+ private ModelPlayer witherModel = new ModelPlayer(0.5F, true);
+
+ public CosmeticWither(RenderPlayer renderPlayer) {
+ this.witherRenderer = renderPlayer;
+ this.witherModel = renderPlayer.getMainModel();
+ }
+
+ public void doRenderLayer(AbstractClientPlayer entitylivingbaseIn, float p_177141_2_, float p_177141_3_, float partialTicks, float p_177141_5_, float p_177141_6_, float p_177141_7_, float scale) {
+
+ GlStateManager.depthMask(!entitylivingbaseIn.isInvisible());
+ this.witherRenderer.bindTexture(WITHER_ARMOR);
+ GlStateManager.matrixMode(5890);
+ GlStateManager.loadIdentity();
+ float f = entitylivingbaseIn.ticksExisted + partialTicks;
+ float f1 = MathHelper.cos(f * 0.02F) * 3.0F;
+ float f2 = f * 0.01F;
+ GlStateManager.translate(f1, f2, 0.0F);
+ GlStateManager.matrixMode(5888);
+ GlStateManager.enableBlend();
+ float f3 = 0.5F;
+ GlStateManager.color(f3, f3, f3, 1.0F);
+ GlStateManager.disableLighting();
+ GlStateManager.blendFunc(1, 1);
+ this.witherModel.setLivingAnimations((EntityLivingBase)entitylivingbaseIn, p_177141_2_, p_177141_3_, partialTicks);
+ this.witherModel.setModelAttributes((ModelBase)this.witherRenderer.getMainModel());
+ this.witherModel.render((Entity)entitylivingbaseIn, p_177141_2_, p_177141_3_, p_177141_5_, p_177141_6_, p_177141_7_, scale);
+ GlStateManager.matrixMode(5890);
+ GlStateManager.loadIdentity();
+ GlStateManager.matrixMode(5888);
+ GlStateManager.enableLighting();
+ GlStateManager.disableBlend();
+
+ }
+
+ public boolean shouldCombineTextures() {
+ return true;
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticWitherArmor.java b/src/minecraft/animeware/cosmetic/impl/CosmeticWitherArmor.java
new file mode 100644
index 0000000..8f3c254
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticWitherArmor.java
@@ -0,0 +1,71 @@
+package animeware.cosmetic.impl;
+
+import java.awt.Color;
+
+import animeware.cosmetic.CosmeticController;
+import animeware.util.RainbowColor;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelPlayer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.client.renderer.entity.layers.LayerRenderer;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+
+
+public class CosmeticWitherArmor implements LayerRenderer
+{
+ private static final ResourceLocation WITHER_ARMOR = new ResourceLocation("Animeware/cosmetic/creeper_armor.png");
+ private final RenderPlayer renderPlayer;
+ private final ModelPlayer playerModel;
+
+ public CosmeticWitherArmor(RenderPlayer renderPlayer)
+ {
+ this.renderPlayer = renderPlayer;
+ this.playerModel = renderPlayer.getMainModel();
+ }
+
+
+
+ public void doRenderLayer(AbstractClientPlayer player, float p_177141_2_, float p_177141_3_, float partialTicks, float p_177141_5_, float p_177141_6_, float p_177141_7_, float scale)
+ {
+
+
+
+
+ if (player == Minecraft.getMinecraft().thePlayer && CosmeticController.shouldRenderTopHat(player)) {
+ GlStateManager.depthMask(!player.isInvisible());
+ this.renderPlayer.bindTexture(WITHER_ARMOR);
+ GlStateManager.matrixMode(5890);
+ GlStateManager.loadIdentity();
+ float f = (float) player.ticksExisted + partialTicks;
+ float f1 = MathHelper.cos(f * 0.004F) * 3.0F;
+ float f2 = f * 0.004F;
+ GlStateManager.translate(f1, f2, 0.0F);
+ GlStateManager.matrixMode(5888);
+ GlStateManager.enableBlend();
+ float f3 = 0.5F;
+ //GlStateManager.color(f3, f3, f3, 1.0F);
+ Color.getColor(String.valueOf(RainbowColor.colorLerpv2(Color.DARK_GRAY, Color.RED, 1)));
+ GlStateManager.disableLighting();
+ GlStateManager.blendFunc(1, 1);
+ this.playerModel.setLivingAnimations(player, p_177141_2_, p_177141_3_, partialTicks);
+ this.playerModel.setModelAttributes(this.renderPlayer.getMainModel());
+ this.playerModel.render(player, p_177141_2_, p_177141_3_, p_177141_5_, p_177141_6_, p_177141_7_, scale);
+ GlStateManager.matrixMode(5890);
+ GlStateManager.loadIdentity();
+ GlStateManager.matrixMode(5888);
+ GlStateManager.enableLighting();
+ GlStateManager.disableBlend();
+ }
+
+
+
+ }
+
+ public boolean shouldCombineTextures()
+ {
+ return false;
+ }
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/CosmeticWitherpet.java b/src/minecraft/animeware/cosmetic/impl/CosmeticWitherpet.java
new file mode 100644
index 0000000..1465d43
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CosmeticWitherpet.java
@@ -0,0 +1,101 @@
+package animeware.cosmetic.impl;
+
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticBase;
+import animeware.cosmetic.CosmeticModelBase;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.Entity;
+import net.minecraft.util.ResourceLocation;
+
+public class CosmeticWitherpet extends CosmeticBase
+{
+ private final CosmeticWitherpet.CosmeticVilligerNose2 wingsModel;
+
+ public CosmeticWitherpet(RenderPlayer renderPlayer)
+ {
+ super(renderPlayer);
+ this.wingsModel = new CosmeticWitherpet.CosmeticVilligerNose2(renderPlayer, 0.0F);
+ }
+
+ public void render(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale)
+ {
+ if(Booleans.Witherpet == true) {
+ GL11.glPushMatrix();
+
+ if (player.isSneaking())
+ {
+ GlStateManager.translate(0.0D, 0.2D, -0.05D);
+ }
+
+ Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("textures/entity/wither/wither.png"));
+ GlStateManager.scale(0.4D, 0.4D, 0.4D);
+ GlStateManager.translate(1.7D, -1.0D, 0.0D);
+ float f = ageInTicks / 60.0F;
+ float f1 = f * (float)Math.PI * 1.0F;
+ GlStateManager.translate(0.0F, -((float)(Math.sin((double)(f1 + 2.0F)) + 0.5D)) * 0.08F, 0.0F);
+ Minecraft.getMinecraft();
+
+ if (player == Minecraft.getMinecraft().thePlayer)
+ {
+ GlStateManager.color(255.0F, 255.0F, 255.0F);
+ this.wingsModel.render(player, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale);
+ }
+
+ GL11.glPopMatrix();
+ }
+
+ }
+
+ public class CosmeticVilligerNose2 extends CosmeticModelBase
+ {
+ private ModelRenderer[] field_82905_a;
+ private ModelRenderer[] field_82904_b;
+
+ public CosmeticVilligerNose2(RenderPlayer player, float p_i46302_1_)
+ {
+ super(player);
+ this.textureWidth = 64;
+ this.textureHeight = 64;
+ this.field_82905_a = new ModelRenderer[3];
+ (this.field_82905_a[0] = new ModelRenderer(this, 0, 16)).addBox(-10.0F, 3.9F, -0.5F, 20, 3, 3, p_i46302_1_);
+ (this.field_82905_a[1] = (new ModelRenderer(this)).setTextureSize(this.textureWidth, this.textureHeight)).setRotationPoint(-2.0F, 6.9F, -0.5F);
+ this.field_82905_a[1].setTextureOffset(0, 22).addBox(0.0F, 0.0F, 0.0F, 3, 10, 3, p_i46302_1_);
+ this.field_82905_a[1].setTextureOffset(24, 22).addBox(-4.0F, 1.5F, 0.5F, 11, 2, 2, p_i46302_1_);
+ this.field_82905_a[1].setTextureOffset(24, 22).addBox(-4.0F, 4.0F, 0.5F, 11, 2, 2, p_i46302_1_);
+ this.field_82905_a[1].setTextureOffset(24, 22).addBox(-4.0F, 6.5F, 0.5F, 11, 2, 2, p_i46302_1_);
+ (this.field_82905_a[2] = new ModelRenderer(this, 12, 22)).addBox(0.0F, 0.0F, 0.0F, 3, 6, 3, p_i46302_1_);
+ this.field_82904_b = new ModelRenderer[3];
+ (this.field_82904_b[0] = new ModelRenderer(this, 0, 0)).addBox(-4.0F, -4.0F, -4.0F, 8, 8, 8, p_i46302_1_);
+ (this.field_82904_b[1] = new ModelRenderer(this, 32, 0)).addBox(-4.0F, -4.0F, -4.0F, 6, 6, 6, p_i46302_1_);
+ this.field_82904_b[1].rotationPointX = -8.0F;
+ this.field_82904_b[1].rotationPointY = 4.0F;
+ (this.field_82904_b[2] = new ModelRenderer(this, 32, 0)).addBox(-4.0F, -4.0F, -4.0F, 6, 6, 6, p_i46302_1_);
+ this.field_82904_b[2].rotationPointX = 10.0F;
+ this.field_82904_b[2].rotationPointY = 4.0F;
+ }
+
+ public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float headYaw, float headPitch, float scale)
+ {
+ GlStateManager.pushMatrix();
+
+ for (ModelRenderer modelrenderer : this.field_82904_b)
+ {
+ modelrenderer.render(scale);
+ }
+
+ for (ModelRenderer modelrenderer1 : this.field_82905_a)
+ {
+ modelrenderer1.render(scale);
+ }
+
+ GlStateManager.popMatrix();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/cosmetic/impl/CustomBandana.java b/src/minecraft/animeware/cosmetic/impl/CustomBandana.java
new file mode 100644
index 0000000..7648e14
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/CustomBandana.java
@@ -0,0 +1,5 @@
+package animeware.cosmetic.impl;
+
+public class CustomBandana {
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/DogPet.java b/src/minecraft/animeware/cosmetic/impl/DogPet.java
new file mode 100644
index 0000000..984bd41
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/DogPet.java
@@ -0,0 +1,136 @@
+package animeware.cosmetic.impl;
+
+import animeware.cosmetic.CosmeticBase;
+import animeware.cosmetic.CosmeticModelBase;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+
+public class DogPet extends CosmeticBase
+{
+ DogPet.WolfModel wolfModel;
+ public static final ResourceLocation TEXTURE = new ResourceLocation("Animeware/cosmetic/wolfModel.png");
+
+ public DogPet(RenderPlayer player)
+ {
+ super(player);
+ this.wolfModel = new DogPet.WolfModel(player);
+ }
+
+
+ public void render(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale)
+ {
+
+ }
+
+ static class WolfModel extends CosmeticModelBase
+ {
+ private final ModelRenderer wolfHeadMain;
+ private final ModelRenderer wolfBody;
+ private final ModelRenderer wolfMane;
+ private final ModelRenderer wolfLeg1;
+ private final ModelRenderer wolfLeg2;
+ private final ModelRenderer wolfLeg3;
+ private final ModelRenderer wolfLeg4;
+ private final ModelRenderer wolfTail;
+
+ public WolfModel(RenderPlayer player)
+ {
+ super(player);
+ float f = 0.0F;
+ float f1 = 13.5F;
+ this.wolfHeadMain = new ModelRenderer(this, 0, 0);
+ this.wolfHeadMain.addBox(-3.0F, -3.0F, -2.0F, 6, 6, 4, f);
+ this.wolfHeadMain.setRotationPoint(-1.0F, f1, -7.0F);
+ this.wolfBody = new ModelRenderer(this, 18, 14);
+ this.wolfBody.addBox(-4.0F, -2.0F, -3.0F, 6, 9, 6, f);
+ this.wolfBody.setRotationPoint(0.0F, 14.0F, 2.0F);
+ this.wolfMane = new ModelRenderer(this, 21, 0);
+ this.wolfMane.addBox(-4.0F, -3.0F, -3.0F, 8, 6, 7, f);
+ this.wolfMane.setRotationPoint(-1.0F, 14.0F, 2.0F);
+ this.wolfLeg1 = new ModelRenderer(this, 0, 18);
+ this.wolfLeg1.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f);
+ this.wolfLeg1.setRotationPoint(-2.5F, 16.0F, 7.0F);
+ this.wolfLeg2 = new ModelRenderer(this, 0, 18);
+ this.wolfLeg2.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f);
+ this.wolfLeg2.setRotationPoint(0.5F, 16.0F, 7.0F);
+ this.wolfLeg3 = new ModelRenderer(this, 0, 18);
+ this.wolfLeg3.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f);
+ this.wolfLeg3.setRotationPoint(-2.5F, 16.0F, -4.0F);
+ this.wolfLeg4 = new ModelRenderer(this, 0, 18);
+ this.wolfLeg4.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f);
+ this.wolfLeg4.setRotationPoint(0.5F, 16.0F, -4.0F);
+ this.wolfTail = new ModelRenderer(this, 9, 18);
+ this.wolfTail.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, f);
+ this.wolfTail.setRotationPoint(-1.0F, 12.0F, 8.0F);
+ this.wolfHeadMain.setTextureOffset(16, 14).addBox(-3.0F, -5.0F, 0.0F, 2, 2, 1, f);
+ this.wolfHeadMain.setTextureOffset(16, 14).addBox(1.0F, -5.0F, 0.0F, 2, 2, 1, f);
+ this.wolfHeadMain.setTextureOffset(0, 10).addBox(-1.5F, 0.0F, -5.0F, 3, 3, 4, f);
+ }
+
+ @Override
+ public void render(Entity entityIn, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float scale)
+ {
+ super.render(entityIn, p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, scale);
+ this.setRotationAngles(p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, scale, entityIn);
+ this.setLivingAnimations((EntityLivingBase)entityIn, p_78088_2_, p_78088_3_, 0.0F);
+ this.wolfHeadMain.renderWithRotation(scale);
+ this.wolfBody.render(scale);
+ this.wolfLeg1.render(scale);
+ this.wolfLeg2.render(scale);
+ this.wolfLeg3.render(scale);
+ this.wolfLeg4.render(scale);
+ this.wolfTail.renderWithRotation(scale);
+ this.wolfMane.render(scale);
+ }
+
+ public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float p_78086_2_, float p_78086_3_, float partialTickTime)
+ {
+ if (entitylivingbaseIn.isSneaking())
+ {
+ this.wolfMane.setRotationPoint(-1.0F, 16.0F, -3.0F);
+ this.wolfMane.rotateAngleX = ((float)Math.PI * 2F / 5F);
+ this.wolfMane.rotateAngleY = 0.0F;
+ this.wolfBody.setRotationPoint(0.0F, 18.0F, 0.0F);
+ this.wolfBody.rotateAngleX = ((float)Math.PI / 4F);
+ this.wolfTail.setRotationPoint(-1.0F, 21.0F, 6.0F);
+ this.wolfLeg1.setRotationPoint(-2.5F, 22.0F, 2.0F);
+ this.wolfLeg1.rotateAngleX = ((float)Math.PI * 3F / 2F);
+ this.wolfLeg2.setRotationPoint(0.5F, 22.0F, 2.0F);
+ this.wolfLeg2.rotateAngleX = ((float)Math.PI * 3F / 2F);
+ this.wolfLeg3.rotateAngleX = 5.811947F;
+ this.wolfLeg3.setRotationPoint(-2.49F, 17.0F, -4.0F);
+ this.wolfLeg4.rotateAngleX = 5.811947F;
+ this.wolfLeg4.setRotationPoint(0.51F, 17.0F, -4.0F);
+ }
+ else
+ {
+ this.wolfBody.setRotationPoint(0.0F, 14.0F, 2.0F);
+ this.wolfBody.rotateAngleX = ((float)Math.PI / 2F);
+ this.wolfMane.setRotationPoint(-1.0F, 14.0F, -3.0F);
+ this.wolfMane.rotateAngleX = this.wolfBody.rotateAngleX;
+ this.wolfTail.setRotationPoint(-1.0F, 12.0F, 8.0F);
+ this.wolfLeg1.setRotationPoint(-2.5F, 16.0F, 7.0F);
+ this.wolfLeg2.setRotationPoint(0.5F, 16.0F, 7.0F);
+ this.wolfLeg3.setRotationPoint(-2.5F, 16.0F, -4.0F);
+ this.wolfLeg4.setRotationPoint(0.5F, 16.0F, -4.0F);
+ this.wolfLeg1.rotateAngleX = MathHelper.cos(p_78086_2_ * 0.6662F) * 1.4F * p_78086_3_;
+ this.wolfLeg2.rotateAngleX = MathHelper.cos(p_78086_2_ * 0.6662F + (float)Math.PI) * 1.4F * p_78086_3_;
+ this.wolfLeg3.rotateAngleX = MathHelper.cos(p_78086_2_ * 0.6662F + (float)Math.PI) * 1.4F * p_78086_3_;
+ this.wolfLeg4.rotateAngleX = MathHelper.cos(p_78086_2_ * 0.6662F) * 1.4F * p_78086_3_;
+ }
+ }
+
+ public void setRotationAngles(float p_78087_1_, float p_78087_2_, float p_78087_3_, float p_78087_4_, float p_78087_5_, float p_78087_6_, Entity entityIn)
+ {
+ super.setRotationAngles(p_78087_1_, p_78087_2_, p_78087_3_, p_78087_4_, p_78087_5_, p_78087_6_, entityIn);
+ this.wolfHeadMain.rotateAngleX = p_78087_5_ / (180F / (float)Math.PI);
+ this.wolfHeadMain.rotateAngleY = p_78087_4_ / (180F / (float)Math.PI);
+ this.wolfTail.rotateAngleX = p_78087_3_;
+ }
+ }
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/GalaxyWings.java b/src/minecraft/animeware/cosmetic/impl/GalaxyWings.java
new file mode 100644
index 0000000..d1aa9d0
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/GalaxyWings.java
@@ -0,0 +1,101 @@
+package animeware.cosmetic.impl;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticChecker;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelBase;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.client.renderer.entity.layers.LayerRenderer;
+import net.minecraft.util.ResourceLocation;
+
+public class GalaxyWings extends ModelBase implements LayerRenderer {
+
+
+ private final RenderPlayer playerRenderer;
+
+ private Minecraft mc;
+
+ private ResourceLocation location;
+
+ private ModelRenderer wing;
+
+ private ModelRenderer wingTip;
+
+ private boolean playerUsesFullHeight;
+
+ public GalaxyWings(RenderPlayer playerRendererIn) {
+
+ this.playerRenderer = playerRendererIn;
+ this.mc = Minecraft.getMinecraft();
+ this.location = new ResourceLocation("Animeware/cosmetic/gwings1.png");
+ setTextureOffset("wing.bone", 0, 0);
+ setTextureOffset("wing.skin", -10, 8);
+ setTextureOffset("wingtip.bone", 0, 5);
+ setTextureOffset("wingtip.skin", -10, 18);
+ this.wing = new ModelRenderer(this, "wing");
+ this.wing.setTextureSize(30, 30);
+ this.wing.setRotationPoint(-1.0F, 0.0F, 0.0F);
+ this.wing.addBox("bone", -10.0F, -1.0F, -1.0F, 10, 2, 2);
+ this.wing.addBox("skin", -10.0F, 0.0F, 0.5F, 10, 0, 10);
+ this.wingTip = new ModelRenderer(this, "wingtip");
+ this.wingTip.setTextureSize(30, 30);
+ this.wingTip.setRotationPoint(-10.0F, 0.0F, 0.0F);
+ this.wingTip.addBox("bone", -10.0F, -0.5F, -0.5F, 10, 1, 1);
+ this.wingTip.addBox("skin", -10.0F, 0.0F, 0.5F, 10, 0, 10);
+ this.wing.addChild(this.wingTip);
+ }
+
+ private float interpolate(float yaw1, float yaw2, float percent) {
+ float f = (yaw1 + (yaw2 - yaw1) * percent) % 360.0F;
+ if (f < 0.0F)
+ f += 360.0F;
+ return f;
+ }
+
+ @Override
+ public void doRenderLayer(AbstractClientPlayer entitylivingbaseIn, float p_177141_2_, float p_177141_3_,
+ float partialTicks, float p_177141_5_, float p_177141_6_, float p_177141_7_, float scalee) {
+
+ if (entitylivingbaseIn == Minecraft.getMinecraft().thePlayer && !entitylivingbaseIn.isInvisible() && Booleans.GalaxyWings) {
+ double rotate = interpolate(entitylivingbaseIn.prevRenderYawOffset, entitylivingbaseIn.renderYawOffset, partialTicks);
+ GL11.glPushMatrix();
+ GL11.glScaled(-0.6, -0.6, 0.6);
+ GL11.glTranslated(0.0D, -1.45, 0.1D);
+ GL11.glTranslated(0.0D, 1.3D, 0.2D);
+ if (entitylivingbaseIn.isSneaking()) {
+ GlStateManager.translate(0.0F, -0.142F, -0.0178F);
+ }
+ GL11.glRotated(130, 1, 0, 0);
+ GL11.glRotated(180, 0, 1, 0);
+
+ GL11.glColor3f(1, 1, 1);
+ this.mc.getTextureManager().bindTexture(this.location);
+ for (int j = 0; j < 2; j++) {
+ GL11.glEnable(2884);
+ float f11 = (float) (System.currentTimeMillis() % 1000L) / 1000.0F * 3.1415927F * 2.0F;
+ this.wing.rotateAngleX = (float) Math.toRadians(-80.0D) - (float) Math.cos(f11) * 0.2F;
+ this.wing.rotateAngleY = (float) Math.toRadians(20.0D) + (float) Math.sin(f11) * 0.4F;
+ this.wing.rotateAngleZ = (float) Math.toRadians(20.0D);
+ this.wingTip.rotateAngleZ = -((float) (Math.sin((f11 + 2.0F)) + 0.5D)) * 0.95F;
+ this.wing.render(0.0615F);
+ GL11.glScalef(-1.0F, 1.0F, 1.0F);
+ if (j == 0)
+ GL11.glCullFace(1028);
+ }
+ GL11.glCullFace(1029);
+ GL11.glDisable(2884);
+ GL11.glColor3f(255.0F, 255.0F, 255.0F);
+ GL11.glPopMatrix();
+ }
+ }
+
+ @Override
+ public boolean shouldCombineTextures() {
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/cosmetic/impl/Halo.java b/src/minecraft/animeware/cosmetic/impl/Halo.java
new file mode 100644
index 0000000..11a295c
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/Halo.java
@@ -0,0 +1,95 @@
+package animeware.cosmetic.impl;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticChecker;
+import animeware.cosmetic.Cosmetic;
+import animeware.cosmetic.CosmeticController;
+import animeware.cosmetic.CosmeticModelBase;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.Entity;
+import net.minecraft.util.ResourceLocation;
+
+public class Halo extends Cosmetic {
+ private final HaloRenderer haloModel;
+
+ public Halo(RenderPlayer renderPlayer) {
+ super("Halo", false, renderPlayer);
+ this.haloModel = new HaloRenderer(renderPlayer);
+ }
+ @Override
+ public void render(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) {
+ if(Booleans.Halo && CosmeticChecker.ownsHalo(player) && player == Minecraft.getMinecraft().thePlayer && !player.isInvisible()) {
+ GL11.glPushMatrix();
+ if(player.isSneaking()) {
+ GlStateManager.translate(0, 0.225, 0);
+ }
+
+ Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/cosmetic/halo.png"));
+ float[] color = CosmeticChecker.getHaloColor(player);
+ GL11.glColor3d(color[0], color[1], color[2]);
+ this.haloModel.render((Entity)player, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale);
+ GL11.glColor3f(1, 1, 1);
+ GL11.glPopMatrix();
+ }
+ }
+
+ public class HaloRenderer extends CosmeticModelBase {
+ ModelRenderer head;
+ ModelRenderer body;
+ ModelRenderer rightarm;
+ ModelRenderer leftarm;
+ ModelRenderer rightleg;
+ ModelRenderer leftleg;
+ ModelRenderer Halo1;
+ ModelRenderer Halo2;
+ ModelRenderer Halo3;
+ ModelRenderer Halo4;
+
+ public HaloRenderer(RenderPlayer player) {
+ super(player);
+ textureWidth = 64;
+ textureHeight = 32;
+
+ Halo1 = new ModelRenderer(this, 0, 0);
+ Halo1.addBox(0F, 0F, 0F, 10, 1, 1);
+ Halo1.setRotationPoint(-5F, -11F, 4F);
+ Halo1.setTextureSize(64, 32);
+ Halo1.mirror = true;
+ Halo2 = new ModelRenderer(this, 0, 0);
+ Halo2.addBox(0F, 0F, 0F, 10, 1, 1);
+ Halo2.setRotationPoint(-5F, -11F, -5F);
+ Halo2.setTextureSize(64, 32);
+ Halo2.mirror = true;
+ Halo3 = new ModelRenderer(this, 0, 0);
+ Halo3.addBox(0F, 0F, 0F, 1, 1, 8);
+ Halo3.setRotationPoint(4F, -11F, -4F);
+ Halo3.setTextureSize(64, 32);
+ Halo3.mirror = true;
+ Halo4 = new ModelRenderer(this, 0, 0);
+ Halo4.addBox(0F, 0F, 0F, 1, 1, 8);
+ Halo4.setRotationPoint(-5F, -11F, -4F);
+ Halo4.setTextureSize(64, 32);
+ Halo4.mirror = true;
+ }
+
+ public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float HeadYaw, float headPitch, float scale) {
+ GlStateManager.pushMatrix();
+ float f1 = + ageInTicks / 100F;
+ float f6 = f1 * 3.1415927F* 1.0F;
+ GlStateManager.translate(0, (-(float)(Math.sin(f6 + 2.0F) + 0.5D) * 0.08F), 0);
+ GlStateManager.scale(0.9, 0.9, 0.9);
+ this.Halo1.render(scale);
+ this.Halo2.render(scale);
+ this.Halo3.render(scale);
+ this.Halo4.render(scale);
+ GlStateManager.popMatrix();
+ }
+ }
+}
+
\ No newline at end of file
diff --git a/src/minecraft/animeware/cosmetic/impl/QuickCape.java b/src/minecraft/animeware/cosmetic/impl/QuickCape.java
new file mode 100644
index 0000000..1df8751
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/QuickCape.java
@@ -0,0 +1,92 @@
+package animeware.cosmetic.impl;
+
+import org.lwjgl.opengl.GL11;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.Entity;
+import net.minecraft.util.ResourceLocation;
+
+import com.mojang.realmsclient.dto.RealmsServer.McoServerComparator;
+
+import animeware.NightSky;
+import animeware.cosmetic.CosmeticChecker;
+import animeware.cosmetic.Cosmetic;
+import animeware.cosmetic.CosmeticController;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.player.EnumPlayerModelParts;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+
+public class QuickCape extends Cosmetic
+{
+ private final RenderPlayer playerRenderer;
+
+ public QuickCape(RenderPlayer renderPlayer) {
+ super("quickcape", true, renderPlayer);
+ this.playerRenderer = renderPlayer;
+ this.wearing = shouldWear();
+ }
+
+
+ public boolean shouldCombineTextures()
+ {
+ return false;
+ }
+
+ @Override
+ public void render(AbstractClientPlayer entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks,
+ float ageInTicks, float netHeadYaw, float headPitch, float scale) {
+ if (/*Animeware.QuickCape && */entitylivingbaseIn.hasPlayerInfo() && !entitylivingbaseIn.isInvisible() && entitylivingbaseIn.isWearing(EnumPlayerModelParts.CAPE)/* && entitylivingbaseIn.getName().equals(Minecraft.getMinecraft().getSession().getUsername())*/ && CosmeticChecker.ownsQuickCape(entitylivingbaseIn))
+ {
+ if(CosmeticController.shouldRenderQuickCape(entitylivingbaseIn) && entitylivingbaseIn == Minecraft.getMinecraft().thePlayer) {
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ this.playerRenderer.bindTexture(new ResourceLocation("Animeware/cosmetic/capes/quick.png"));
+ GlStateManager.pushMatrix();
+ GlStateManager.translate(0.0F, 0.0F, 0.125F);
+ double d0 = entitylivingbaseIn.prevChasingPosX + (entitylivingbaseIn.chasingPosX - entitylivingbaseIn.prevChasingPosX) * (double)partialTicks - (entitylivingbaseIn.prevPosX + (entitylivingbaseIn.posX - entitylivingbaseIn.prevPosX) * (double)partialTicks);
+ double d1 = entitylivingbaseIn.prevChasingPosY + (entitylivingbaseIn.chasingPosY - entitylivingbaseIn.prevChasingPosY) * (double)partialTicks - (entitylivingbaseIn.prevPosY + (entitylivingbaseIn.posY - entitylivingbaseIn.prevPosY) * (double)partialTicks);
+ double d2 = entitylivingbaseIn.prevChasingPosZ + (entitylivingbaseIn.chasingPosZ - entitylivingbaseIn.prevChasingPosZ) * (double)partialTicks - (entitylivingbaseIn.prevPosZ + (entitylivingbaseIn.posZ - entitylivingbaseIn.prevPosZ) * (double)partialTicks);
+ float f = entitylivingbaseIn.prevRenderYawOffset + (entitylivingbaseIn.renderYawOffset - entitylivingbaseIn.prevRenderYawOffset) * partialTicks;
+ double d3 = (double)MathHelper.sin(f * (float)Math.PI / 180.0F);
+ double d4 = (double)(-MathHelper.cos(f * (float)Math.PI / 180.0F));
+ float f1 = (float)d1 * 10.0F;
+ f1 = MathHelper.clamp_float(f1, -6.0F, 32.0F);
+ float f2 = (float)(d0 * d3 + d2 * d4) * 100.0F;
+ float f3 = (float)(d0 * d4 - d2 * d3) * 100.0F;
+
+ if (f2 < 0.0F)
+ {
+ f2 = 0.0F;
+ }
+
+ float f4 = entitylivingbaseIn.prevCameraYaw + (entitylivingbaseIn.cameraYaw - entitylivingbaseIn.prevCameraYaw) * partialTicks;
+ f1 = f1 + MathHelper.sin((entitylivingbaseIn.prevDistanceWalkedModified + (entitylivingbaseIn.distanceWalkedModified - entitylivingbaseIn.prevDistanceWalkedModified) * partialTicks) * 6.0F) * 32.0F * f4;
+
+ if (entitylivingbaseIn.isSneaking())
+ {
+ f1 += 25.0F;
+ }
+
+ GlStateManager.rotate(6.0F + f2 / 2.0F + f1, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(f3 / 2.0F, 0.0F, 0.0F, 1.0F);
+ GlStateManager.rotate(-f3 / 2.0F, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F);
+ this.playerRenderer.getMainModel().renderCape(0.0625F);
+ GlStateManager.popMatrix();
+ }
+ }
+ }
+
+ public static boolean shouldWear() {
+ if(mc.getSession().getUsername().equalsIgnoreCase("hypnomacka")) return true;
+
+ else return false;
+ }
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/Susanno2.java b/src/minecraft/animeware/cosmetic/impl/Susanno2.java
new file mode 100644
index 0000000..ed969af
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/Susanno2.java
@@ -0,0 +1,139 @@
+package animeware.cosmetic.impl;
+
+import animeware.cosmetic.CosmeticBase;
+import animeware.cosmetic.CosmeticModelBase;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.Entity;
+
+
+public class Susanno2 extends CosmeticBase {
+ private final NAME2 nameModel;
+
+ public Susanno2(RenderPlayer renderPlayer) {
+ super(renderPlayer);
+ this.nameModel = new NAME2(renderPlayer);
+ }
+
+ public void render(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) {
+
+ GlStateManager.pushMatrix();
+ GlStateManager.color(1, 0, 0);
+ GlStateManager.disableLighting();
+ GlStateManager.blendFunc(1, 1);
+ GlStateManager.enableBlend();
+ if(player.isSneaking()) {
+ GlStateManager.rotate(20, 1, 0, 0);
+ GlStateManager.translate(0, 0.20, -0.05);
+ }
+ GlStateManager.translate(0, -0.2, 0);
+
+
+ String uuid = player.getUniqueID().toString();
+ if(uuid.contains("56440916ebc4470bbac02088214a78d7")) {
+ this.nameModel.render((Entity)player, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale);
+ GlStateManager.color(1, 0, 1);
+ }
+ if(player == Minecraft.getMinecraft().thePlayer) {
+ GlStateManager.disableColorMaterial();
+ GlStateManager.color(255, 0, 0);
+ this.nameModel.render((Entity)player, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale);
+ }
+ GlStateManager.enableLighting();
+ GlStateManager.enableLighting();
+ GlStateManager.enableColorMaterial();
+ GlStateManager.disableBlend();
+ GlStateManager.popMatrix();
+ }
+ class NAME2 extends CosmeticModelBase {
+ ModelRenderer Back;
+ ModelRenderer upperlane;
+ ModelRenderer upperlaneonedown;
+ ModelRenderer upperlanetwodown;
+ ModelRenderer left1;
+ ModelRenderer left2;
+ ModelRenderer left3;
+ ModelRenderer right1;
+ ModelRenderer right2;
+ ModelRenderer right3;
+
+ public NAME2(RenderPlayer player) {
+ super(player);
+ textureWidth = 0;
+ textureHeight = 0;
+ Back = new ModelRenderer(this, 0, 0);
+ Back.addBox(0F, 0F, 0F, 2, 15, 1);
+ Back.setRotationPoint(-1F, 0F, 6F);
+ Back.setTextureSize(64, 32);
+ Back.mirror = true;
+ upperlane = new ModelRenderer(this, 0, 0);
+ upperlane.addBox(0F, 0F, 0F, 22, 1, 1);
+ upperlane.setRotationPoint(-11F, 3F, 6F);
+ upperlane.setTextureSize(64, 32);
+ upperlane.mirror = true;
+ upperlaneonedown = new ModelRenderer(this, 0, 0);
+ upperlaneonedown.addBox(0F, 0F, 0F, 22, 1, 1);
+ upperlaneonedown.setRotationPoint(-11F, 6F, 6F);
+ upperlaneonedown.setTextureSize(64, 32);
+ upperlaneonedown.mirror = true;
+ upperlanetwodown = new ModelRenderer(this, 0, 0);
+ upperlanetwodown.addBox(0F, 0F, 0F, 22, 1, 1);
+ upperlanetwodown.setRotationPoint(-11F, 10F, 6F);
+ upperlanetwodown.setTextureSize(64, 32);
+ upperlanetwodown.mirror = true;
+ left1 = new ModelRenderer(this, 0, 0);
+ left1.addBox(0F, 0F, 0F, 1, 1, 9);
+ left1.setRotationPoint(10F, 3F, -3F);
+ left1.setTextureSize(64, 32);
+ left1.mirror = true;
+ left2 = new ModelRenderer(this, 0, 0);
+ left2.addBox(0F, 0F, 0F, 1, 1, 9);
+ left2.setRotationPoint(10F, 6F, -3F);
+ left2.setTextureSize(64, 32);
+ left2.mirror = true;
+ left3 = new ModelRenderer(this, 0, 0);
+ left3.addBox(0F, 0F, 0F, 1, 1, 9);
+ left3.setRotationPoint(10F, 10F, -3F);
+ left3.setTextureSize(64, 32);
+ left3.mirror = true;
+ right1 = new ModelRenderer(this, 0, 0);
+ right1.addBox(0F, 0F, 0F, 1, 1, 9);
+ right1.setRotationPoint(-11F, 3F, -3F);
+ right1.setTextureSize(64, 32);
+ right1.mirror = true;
+ right2 = new ModelRenderer(this, 0, 0);
+ right2.addBox(0F, 0F, 0F, 1, 1, 9);
+ right2.setRotationPoint(-11F, 6F, -3F);
+ right2.setTextureSize(64, 32);
+ right2.mirror = true;
+ right3 = new ModelRenderer(this, 0, 0);
+ right3.addBox(0F, 0F, 0F, 1, 1, 9);
+ right3.setRotationPoint(-11F, 10F, -3F);
+ right3.setTextureSize(64, 32);
+ right3.mirror = true;
+
+
+ }
+
+ public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float headYaw, float headPitch, float scale) {
+ GlStateManager.pushMatrix();
+ this.Back.render(scale);
+ this.right1.render(scale);
+ this.right2.render(scale);
+ this.right3.render(scale);
+ this.upperlane.render(scale);
+ this.upperlaneonedown.render(scale);
+ this.upperlanetwodown.render(scale);
+ this.left1.render(scale);
+ this.left2.render(scale);
+ this.left3.render(scale);
+
+ GlStateManager.popMatrix();
+
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/cosmetic/impl/TopHat.java b/src/minecraft/animeware/cosmetic/impl/TopHat.java
new file mode 100644
index 0000000..f4950df
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/TopHat.java
@@ -0,0 +1,95 @@
+package animeware.cosmetic.impl;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticChecker;
+import animeware.cosmetic.Cosmetic;
+import animeware.cosmetic.CosmeticModelBase;
+import animeware.cosmetic.HatChecker;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.Entity;
+import net.minecraft.util.ResourceLocation;
+
+public class TopHat extends Cosmetic {
+
+ private final ModelTopHat modelTopHat;
+ private static final ResourceLocation TEXTURE = new ResourceLocation("Animeware/cosmetic/hat.png");
+
+ public TopHat(RenderPlayer renderPlayer) {
+ super("TopHat", false, renderPlayer);
+ modelTopHat = new ModelTopHat(renderPlayer);
+ }
+
+ @Override
+ public void render(AbstractClientPlayer entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks,
+ float ageInTicks, float netHeadYaw, float headPitch, float scale) {
+
+ if(Booleans.TopHat && /*entitylivingbaseIn.getName().equals(Minecraft.getMinecraft().getSession().getUsername()) && */CosmeticChecker.ownsHat(entitylivingbaseIn)) {
+ GlStateManager.pushMatrix();
+ playerRenderer.bindTexture(TEXTURE);
+
+ if(entitylivingbaseIn.isSneaking()) {
+ GL11.glTranslated(0, 0.225D, 0);
+ }
+
+ float[] color = CosmeticChecker.getTopHatColor(entitylivingbaseIn);
+ GL11.glColor3d(color[0], color[1], color[2]);
+ modelTopHat.render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, scale);
+ GL11.glColor3f(1, 1, 1);
+ GL11.glPopMatrix();
+ }
+
+ }
+
+ private static class ModelTopHat extends CosmeticModelBase {
+
+ private ModelRenderer rim;
+ private ModelRenderer pointy;
+
+ public ModelTopHat(RenderPlayer renderPlayer) {
+ super(renderPlayer);
+ rim = new ModelRenderer(playerModel, 0, 0);
+ rim.addBox(-5.5f, -9f, -5.5f, 11, 2, 11);
+
+ pointy = new ModelRenderer(playerModel, 0, 13);
+ pointy.addBox(-3.5f, -17f, -3.5f, 7, 8, 7);
+ }
+
+ public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float headYaw, float headPitch, float headScale, float scale) {
+
+ rim.rotateAngleX = playerModel.bipedHead.rotateAngleX;
+ rim.rotateAngleY = playerModel.bipedHead.rotateAngleY;
+ rim.rotationPointX = 0.0f;
+ rim.rotationPointY = 0.0f;
+ rim.render(scale);
+
+ pointy.rotateAngleX = playerModel.bipedHead.rotateAngleX;
+ pointy.rotateAngleY = playerModel.bipedHead.rotateAngleY;
+ pointy.rotationPointX = 0.0f;
+ pointy.rotationPointY = 0.0f;
+ pointy.render(scale);
+
+ }
+
+ /*public boolean ownsCosmeticHat() {
+ if(mc.getSession().getUsername().equalsIgnoreCase("hypnomacka")) return true;
+ if(mc.getSession().getUsername().equalsIgnoreCase("Quaversal")) return true;
+
+ else return false;
+ }*/
+
+
+ }
+
+ public static boolean ownsCosmeticHat() {
+ if(mc.getSession().getUsername().equalsIgnoreCase("hypnomacka")) return true;
+ if(mc.getSession().getUsername().equalsIgnoreCase("Quaversal")) return true;
+
+ else return false;
+ }
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/eyes/CosmeticEyes.java b/src/minecraft/animeware/cosmetic/impl/eyes/CosmeticEyes.java
new file mode 100644
index 0000000..e2cb33e
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/eyes/CosmeticEyes.java
@@ -0,0 +1,146 @@
+package animeware.cosmetic.impl.eyes;
+
+import java.util.Random;
+
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticBase;
+import animeware.cosmetic.CosmeticController;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.util.ResourceLocation;
+
+public class CosmeticEyes extends CosmeticBase {
+
+ private final ModelEyes model;
+ private static final ResourceLocation TEXTURE = new ResourceLocation("clientname/eyes.png");
+
+ private static final float[] headJointSneak = new float[] {0F, -1F/16F, 0F};
+ private static final float[] headJoint = new float[3];
+ private static final float[] eyeOffset = new float[] {0F, 4F/16F, 4F/16F};
+ private static final float[] irisColor = new float[] {0.9F, 0.9F, 0.9F};
+ private static final float[] pupilColor = new float[] {0.0F, 0.0F, 0.0F};
+ private static final float halfInterpupillaryDistance = 2F/16F;
+ private static final float eyeScale = 0.75F;
+ private static final float modelScale = 0.0625F;
+
+ private Random rand = new Random();
+ private int[] potionTime = new int[2];
+
+ public CosmeticEyes(RenderPlayer playerRenderer) {
+ super(playerRenderer);
+ model = new ModelEyes(playerRenderer);
+ }
+
+ @Override
+ public void render(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) {
+
+ if(!Booleans.retardEyes) {
+ return;
+ }
+
+ EyePhysics physics = PhysicsManager.getInstance().getPhysics(player);
+
+ physics.requireUpdate();
+
+ GlStateManager.enableDepth();
+ GlStateManager.depthMask(true);
+
+ for(int i = 0; i < 2; i++) {
+ GlStateManager.color(0F, 1F, 1F, 1F);
+ GlStateManager.pushMatrix();
+
+ float[] joint = getSneakOffset(player, partialTicks);
+ GlStateManager.translate(-joint[0], -joint[1], -joint[2]);
+
+ GlStateManager.rotate(getHeadYaw(player, partialTicks), 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(getHeadPitch(player, partialTicks), 1.0F, 0.0F, 0.0F);
+
+ GlStateManager.translate(-(eyeOffset[0] + (i == 0 ? halfInterpupillaryDistance : -halfInterpupillaryDistance)), -eyeOffset[1], -eyeOffset[2]);
+
+ GlStateManager.scale(eyeScale, eyeScale, eyeScale * 0.5F);
+
+ Minecraft.getMinecraft().getTextureManager().bindTexture(TEXTURE);
+
+ GlStateManager.color(irisColor[0], irisColor[1], irisColor[2]);
+ model.renderIris(modelScale);
+
+ GlStateManager.color(pupilColor[0], pupilColor[1], pupilColor[2]);
+ float pupilScale = getPupilScale(player, partialTicks, i);
+
+ GlStateManager.pushMatrix();
+ GlStateManager.scale(pupilScale, pupilScale, 1F);
+
+ model.movePupil(
+ physics.eyes[i].prevDeltaX + (physics.eyes[i].deltaX - physics.eyes[i].prevDeltaX) * partialTicks,
+ physics.eyes[i].prevDeltaY + (physics.eyes[i].deltaY - physics.eyes[i].prevDeltaY) * partialTicks,
+ pupilScale
+ );
+
+ model.renderPupil(modelScale);
+
+ GlStateManager.popMatrix();
+ GlStateManager.popMatrix();
+
+ }
+
+ GlStateManager.color(0F, 1F, 1F, 1F);
+
+ }
+
+ //TODO:
+ private float getPupilScale(AbstractClientPlayer player, float partialTicks, int eye) {
+
+ if(!player.getActivePotionEffects().isEmpty()) {
+
+ rand.setSeed(Math.abs(player.hashCode()) * 1000);
+ if(potionTime == null || potionTime.length < 2) {
+ potionTime = new int[2];
+ }
+
+ for(int i = 0; i < potionTime.length; i++) {
+ potionTime[i] = 20 + rand.nextInt(20);
+ }
+ return 0.3F + ((float) Math.sin(Math.toRadians((player.ticksExisted + partialTicks) / potionTime[eye] * 360)) + 1F) / 2F;
+
+ }
+
+ return 1F;
+ }
+
+ private float interpolateRotation(float prevAngle, float nextAngle, float partialTicks) {
+ float f = nextAngle - prevAngle;
+ while(f < -180) {
+ f += 360.0F;
+ }
+
+ while(f >= 180) {
+ f -= 360.0F;
+ }
+
+ return prevAngle + partialTicks * f;
+ }
+
+ private float getHeadPitch(AbstractClientPlayer player, float partialTicks) {
+ return interpolateRotation(player.prevRotationPitch, player.rotationPitch, partialTicks);
+ }
+
+ private float getHeadYaw(AbstractClientPlayer player, float partialTicks) {
+ return interpolateRotation(player.prevRotationYawHead, player.rotationYawHead, partialTicks) - interpolateRotation(player.prevRenderYawOffset, player.renderYawOffset, partialTicks);
+ }
+
+ private float[] getSneakOffset(AbstractClientPlayer player, float partialTicks) {
+ if(player.isSneaking()) {
+ GlStateManager.translate(0.0f, 0.2f, 0.0F);
+ return headJointSneak;
+ }
+ return headJoint;
+ }
+
+ @Override
+ public boolean shouldCombineTextures() {
+ return true;
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/eyes/EyePhysics.java b/src/minecraft/animeware/cosmetic/impl/eyes/EyePhysics.java
new file mode 100644
index 0000000..e6d6700
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/eyes/EyePhysics.java
@@ -0,0 +1,147 @@
+package animeware.cosmetic.impl.eyes;
+
+import java.util.Random;
+
+import animeware.cosmetic.CosmeticController;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.util.MathHelper;
+
+public class EyePhysics {
+
+ private final AbstractClientPlayer player;
+ private final Random rand;
+
+ private boolean shouldUpdate = true;
+ private long lastUpdate;
+
+ private double motionX;
+ private double motionY;
+ private double motionZ;
+
+ public EyeInfo[] eyes;
+
+ public class EyeInfo {
+
+ private float rotationYaw;
+ private float rotationPitch;
+
+ public float prevDeltaX;
+ public float prevDeltaY;
+ public float deltaX;
+ public float deltaY;
+
+ private float momentumX;
+ private float momentumY;
+
+ public EyeInfo() {
+ prevDeltaY = deltaY = -1f;
+ }
+
+ public void update(int eve, EyePhysics physics, double motionX, double motionY, double motionZ) {
+
+ float prevRotationYaw = rotationYaw;
+ float prevRotationPitch = rotationPitch;
+
+ rotationYaw = physics.player.prevRotationYaw;
+ rotationPitch = physics.player.prevRotationPitch;
+
+ prevDeltaX = deltaX;
+ prevDeltaY = deltaY;
+
+ float yawDiff = rotationYaw - prevRotationYaw;
+ float pitchDiff = rotationPitch - prevRotationPitch;
+
+ momentumY += motionY * 1.5F + (motionX + motionZ) * rand.nextGaussian() * 0.75F + (pitchDiff / 45F) + (yawDiff / 180F);
+ momentumX -= (motionX + motionZ) * rand.nextGaussian() * 0.4F + (yawDiff / 45F);
+
+ float momentumLoss = 0.9F;
+ float newDeltaX = deltaX + momentumX;
+ float newDeltaY = deltaY + momentumY;
+
+ if(newDeltaX < -1F || newDeltaX > 1F) {
+
+ float newMo = momentumX * -momentumLoss;
+ float randomFloat = 0.8F + rand.nextFloat() * 0.2F;
+ momentumX = newMo * randomFloat;
+ momentumY += newMo * randomFloat * (rand.nextFloat() > 0.5F ? 1F : -1F);
+
+ }
+
+ if(newDeltaY < -1F || newDeltaY > 1F) {
+ float newMo = momentumY * -momentumLoss;
+ float randomFloat = 0.8F + rand.nextFloat() * 0.2F;
+ momentumX = newMo * randomFloat;
+ momentumY += newMo * randomFloat * (rand.nextFloat() > 0.5F ? 1F : -1F);
+ }
+ else {
+ momentumY -= MathHelper.clamp_float(1F + deltaY, 0F, 0.1999F);
+ }
+
+ momentumX *= 0.95F;
+ deltaX *= 0.95F;
+
+ if(Math.abs(momentumX) < 0.03F) {
+ momentumX = 0.0F;
+ }
+
+ if(Math.abs(deltaX) < 0.03F) {
+ deltaX = 0.0F;
+ }
+
+ float maxMomentum = 1.3f;
+
+ momentumX = MathHelper.clamp_float(momentumX, -maxMomentum, maxMomentum);
+ momentumY = MathHelper.clamp_float(momentumY, -maxMomentum, maxMomentum);
+
+ deltaX += momentumX;
+ deltaY += momentumY;
+
+ deltaX = MathHelper.clamp_float(deltaX, -1F, 1F);
+ deltaY = MathHelper.clamp_float(deltaY, -1F, 1F);
+
+ }
+
+ }
+
+ public EyePhysics(AbstractClientPlayer player) {
+ this.player = player;
+ this.rand = new Random(Math.abs(player.hashCode()) * 8134);
+ this.eyes = new EyeInfo[2];
+ for(int i = 0; i < eyes.length; i++) {
+ this.eyes[i] = new EyeInfo();
+ }
+ update();
+ }
+
+ public void update() {
+
+ if(!shouldUpdate) {
+ return;
+ }
+
+ shouldUpdate = false;
+
+ motionX = player.posX - player.prevPosX;
+ motionY = player.posY - player.prevPosY;
+ motionZ = player.posZ - player.prevPosZ;
+
+ for(int i = 0; i < eyes.length; i++) {
+ eyes[i].update(i, this, motionX, motionY, motionZ);
+ }
+
+ }
+
+ public void requireUpdate() {
+ shouldUpdate = true;
+ lastUpdate = player.worldObj.getWorldTime();
+ }
+
+ public long getLastUpdate() {
+ return lastUpdate;
+ }
+
+ public AbstractClientPlayer getPlayer() {
+ return player;
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/eyes/ModelEyes.java b/src/minecraft/animeware/cosmetic/impl/eyes/ModelEyes.java
new file mode 100644
index 0000000..98e81b7
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/eyes/ModelEyes.java
@@ -0,0 +1,91 @@
+package animeware.cosmetic.impl.eyes;
+
+import animeware.cosmetic.CosmeticModelBase;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.entity.Entity;
+
+public class ModelEyes extends CosmeticModelBase {
+
+ private ModelRenderer[] iris = new ModelRenderer[12];
+ private ModelRenderer[] pupils = new ModelRenderer[6];
+
+ private final float POP1 = 0.5235987755982988F;
+ private final float POP2 = 1.0471975511965976F;
+ private final float POP3 = 1.5707963267948966F;
+ private final float POP4 = 2.0943951023931953F;
+ private final float POP5 = 2.6179938779914944F;
+ private final float POP6 = 3.141592653589793F;
+
+ public ModelEyes(RenderPlayer player) {
+ super(player);
+
+ for(int i = 0; i < iris.length; i++) {
+ this.iris[i] = new ModelRenderer(this, 0, 0);
+ this.iris[i].setRotationPoint(0, 0, 0);
+ this.iris[i].addBox(-0.5F, -1.88F, -1.0F, 1, 3, 1, 0.0F);
+ }
+
+ this.setRotationAngle(iris[0], 0.0F, 0.0F, -POP1);
+ this.setRotationAngle(iris[1], 0.0F, 0.0F, -POP2);
+ this.setRotationAngle(iris[2], 0.0F, 0.0F, -POP3);
+ this.setRotationAngle(iris[3], 0.0F, 0.0F, -POP4);
+ this.setRotationAngle(iris[4], 0.0F, 0.0F, -POP5);
+ this.setRotationAngle(iris[5], 0.0F, 0.0F, -POP6);
+
+ this.setRotationAngle(iris[6], 0.0F, 0.0F, POP5);
+ this.setRotationAngle(iris[7], 0.0F, 0.0F, POP4);
+ this.setRotationAngle(iris[8], 0.0F, 0.0F, POP3);
+ this.setRotationAngle(iris[9], 0.0F, 0.0F, POP2);
+ this.setRotationAngle(iris[10], 0.0F, 0.0F, POP1);
+
+ for(int i = 0; i < pupils.length; i++) {
+ this.pupils[i] = new ModelRenderer(this, 0, 0);
+ this.pupils[i].setRotationPoint(0, 0, 0);
+ this.pupils[i].addBox(-0.5f, -0.88f, -1.5f, 1, 1, 1, 0.0F);
+ }
+
+ this.setRotationAngle(pupils[0], 0.0F, 0.0F, -POP2);
+ this.setRotationAngle(pupils[1], 0.0F, 0.0F, -POP4);
+ this.setRotationAngle(pupils[2], 0.0F, 0.0F, -POP6);
+ this.setRotationAngle(pupils[3], 0.0F, 0.0F, POP4);
+ this.setRotationAngle(pupils[4], 0.0F, 0.0F, POP2);
+ }
+
+ private void setRotationAngle(ModelRenderer m, float x, float y, float z) {
+ m.rotateAngleX = x;
+ m.rotateAngleY = y;
+ m.rotateAngleZ = z;
+ }
+
+ @Override
+ public void render(Entity entityIn, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float scale) {
+ /*Nothing here*/
+ }
+
+ public void renderIris(float pt) {
+ for(int i = 0; i < iris.length; i++) {
+ this.iris[i].render(pt);
+ }
+ }
+
+ public void renderPupil(float pt) {
+ for(int i = 0; i < pupils.length; i++) {
+ this.pupils[i].render(pt);
+ }
+ }
+
+ public void movePupil(float x, float y, float size) {
+
+ float shiftFactor = (1.45F - size * 0.525F) / size;
+
+ for(int i = 0; i < pupils.length; i++) {
+
+ pupils[i].rotationPointX = -x * shiftFactor;
+ pupils[i].rotationPointY = -y * shiftFactor * (float)Math.cos(Math.toRadians((x / 1F) * 90F));
+
+ }
+
+ }
+
+}
diff --git a/src/minecraft/animeware/cosmetic/impl/eyes/PhysicsManager.java b/src/minecraft/animeware/cosmetic/impl/eyes/PhysicsManager.java
new file mode 100644
index 0000000..c5574ae
--- /dev/null
+++ b/src/minecraft/animeware/cosmetic/impl/eyes/PhysicsManager.java
@@ -0,0 +1,71 @@
+package animeware.cosmetic.impl.eyes;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import animeware.event.EventManager;
+import animeware.event.EventTarget;
+import animeware.event.impl.ClientTick;
+import animeware.event.impl.WorldUnloadEvent;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+
+public class PhysicsManager {
+
+ private WeakHashMap physicsList = new WeakHashMap();
+
+ private static PhysicsManager instance = null;
+
+ public static PhysicsManager getInstance() {
+ if(instance == null) {
+ instance = new PhysicsManager();
+ EventManager.register(instance);
+ }
+ return instance;
+ }
+
+ public EyePhysics getPhysics(AbstractClientPlayer player) {
+ if(!physicsList.containsKey(player)) {
+ physicsList.put(player, new EyePhysics(player));
+ }
+ return physicsList.get(player);
+ }
+
+ @EventTarget
+ public void onTick(ClientTick event) {
+
+ if(Minecraft.getMinecraft().theWorld != null && !Minecraft.getMinecraft().isGamePaused()) {
+
+ Iterator> iterator = physicsList.entrySet().iterator();
+
+ while(iterator.hasNext()) {
+ Map.Entry e = iterator.next();
+ EyePhysics ep = e.getValue();
+
+ if(ep.getPlayer().worldObj.getWorldTime() - ep.getLastUpdate() > 3) {
+ iterator.remove();
+ }
+ else {
+ ep.update();
+ }
+ }
+
+ }
+
+ }
+
+ @EventTarget
+ public void onWorldUload(WorldUnloadEvent event) {
+ Iterator> iterator = physicsList.entrySet().iterator();
+
+ while(iterator.hasNext()) {
+ Map.Entry e = iterator.next();
+ EyePhysics ep = e.getValue();
+ if(ep.getPlayer().worldObj == event.getWorld()) {
+ iterator.remove();
+ }
+ }
+ }
+
+}
diff --git a/src/minecraft/animeware/event/ArrayHelper.java b/src/minecraft/animeware/event/ArrayHelper.java
new file mode 100644
index 0000000..75274b9
--- /dev/null
+++ b/src/minecraft/animeware/event/ArrayHelper.java
@@ -0,0 +1,130 @@
+package animeware.event;
+
+import java.util.Iterator;
+
+/**
+ * Created by Hexeption on 18/12/2016.
+ */
+public class ArrayHelper implements Iterable {
+
+ //TODO: Comment out the code.
+
+ private T[] elements;
+
+ public ArrayHelper(final T[] array) {
+
+ this.elements = array;
+ }
+
+ public ArrayHelper() {
+
+ this.elements = (T[]) new Object[0];
+ }
+
+ public void add(final T t) {
+
+ if (t != null) {
+ final Object[] array = new Object[this.size() + 1];
+
+ for (int i = 0; i < array.length; i++) {
+ if (i < this.size()) {
+ array[i] = this.get(i);
+ } else {
+ array[i] = t;
+ }
+ }
+
+ this.set((T[]) array);
+ }
+ }
+
+ public boolean contains(final T t) {
+
+ Object[] array;
+
+ for (int lenght = (array = this.array()).length, i = 0; i < lenght; i++) {
+ final T entry = (T) array[i];
+ if (entry.equals(t)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public void remove(final T t) {
+
+ if (this.contains(t)) {
+ final Object[] array = new Object[this.size() - 1];
+ boolean b = true;
+
+ for (int i = 0; i < this.size(); i++) {
+ if (b && this.get(i).equals(t)) {
+ b = false;
+ } else {
+ array[b ? i : (i - 1)] = this.get(i);
+ }
+ }
+
+ this.set((T[]) array);
+ }
+ }
+
+ public T[] array() {
+
+ return (T[]) this.elements;
+ }
+
+ public int size() {
+
+ return this.array().length;
+ }
+
+ public void set(final T[] array) {
+
+ this.elements = array;
+ }
+
+ public T get(final int index) {
+
+ return this.array()[index];
+ }
+
+ public void clear() {
+
+ this.elements = (T[]) new Object[0];
+ }
+
+ public boolean isEmpty() {
+
+ return this.size() == 0;
+ }
+
+ @Override
+ public Iterator iterator() {
+
+ return new Iterator() {
+
+ private int index = 0;
+
+ @Override
+ public boolean hasNext() {
+
+ return this.index < ArrayHelper.this.size() && ArrayHelper.this.get(this.index) != null;
+ }
+
+ @Override
+ public T next() {
+
+ return ArrayHelper.this.get(this.index++);
+ }
+
+ @Override
+ public void remove() {
+
+ ArrayHelper.this.remove(ArrayHelper.this.get(this.index));
+ }
+ };
+
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/event/Cancelable.java b/src/minecraft/animeware/event/Cancelable.java
new file mode 100644
index 0000000..553e87b
--- /dev/null
+++ b/src/minecraft/animeware/event/Cancelable.java
@@ -0,0 +1,11 @@
+package animeware.event;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+@Retention(value = RUNTIME)
+@Target(value = TYPE)
+public @interface Cancelable{}
diff --git a/src/minecraft/animeware/event/Data.java b/src/minecraft/animeware/event/Data.java
new file mode 100644
index 0000000..7fc1a4d
--- /dev/null
+++ b/src/minecraft/animeware/event/Data.java
@@ -0,0 +1,23 @@
+package animeware.event;
+
+import java.lang.reflect.Method;
+
+/**
+ * Created by Hexeption on 18/12/2016.
+ */
+public class Data {
+
+ public final Object source;
+
+ public final Method target;
+
+ public final byte priority;
+
+ Data(Object source, Method target, byte priority) {
+
+ this.source = source;
+ this.target = target;
+ this.priority = priority;
+ }
+
+}
diff --git a/src/minecraft/animeware/event/Event.java b/src/minecraft/animeware/event/Event.java
new file mode 100644
index 0000000..7efa276
--- /dev/null
+++ b/src/minecraft/animeware/event/Event.java
@@ -0,0 +1,81 @@
+package animeware.event;
+
+import java.lang.reflect.InvocationTargetException;
+
+import animeware.NightSky;
+
+/**
+ * Created by Hexeption on 18/12/2016.
+ */
+public abstract class Event {
+
+ /**
+ *
+ * Main events you may need:
+ *
+ * Minecraft:
+ * - EventKeyboard
+ * - EventMiddleClick
+ * - EventTick
+ *
+ * EntityPlayerSP:
+ * - EventUpdate
+ * - EventPreMotionUpdates
+ * - EventPostMotionUpdates
+ *
+ * GuiIngame:
+ * - EventRender2D
+ *
+ * EntityRenderer:
+ * - EventRender3D
+ *
+ */
+
+ private boolean cancelled;
+
+ public enum State {
+ PRE("PRE", 0),
+
+ POST("POST", 1);
+
+ private State(final String string, final int number) {
+
+ }
+ }
+
+ public Event call() {
+
+ this.cancelled = false;
+ call(this);
+ return this;
+ }
+
+ public boolean isCancelled() {
+
+ return cancelled;
+ }
+
+ public void setCancelled(boolean cancelled) {
+
+ this.cancelled = cancelled;
+ }
+
+ private static final void call(final Event event) {
+
+ final ArrayHelper dataList = NightSky.INSTANCE.eventManager.get(event.getClass());
+
+ if (dataList != null) {
+ for (final Data data : dataList) {
+
+ try {
+ data.target.invoke(data.source, event);
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ }
+
+ }
+ }
+ }
+}
diff --git a/src/minecraft/animeware/event/EventListener.java b/src/minecraft/animeware/event/EventListener.java
new file mode 100644
index 0000000..742188b
--- /dev/null
+++ b/src/minecraft/animeware/event/EventListener.java
@@ -0,0 +1,5 @@
+package animeware.event;
+
+public interface EventListener {
+ void call(T event);
+}
diff --git a/src/minecraft/animeware/event/EventManager.java b/src/minecraft/animeware/event/EventManager.java
new file mode 100644
index 0000000..69773ac
--- /dev/null
+++ b/src/minecraft/animeware/event/EventManager.java
@@ -0,0 +1,148 @@
+package animeware.event;
+
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * Created by Hexeption on 18/12/2016.
+ */
+public class EventManager {
+
+ //TODO: Comment Event's
+
+ private static final Map, ArrayHelper> REGISTRY_MAP;
+
+ public static void register(final Object o) {
+
+ for (final Method method : o.getClass().getDeclaredMethods()) {
+ if (!isMethodBad(method)) {
+ register(method, o);
+ }
+ }
+ }
+
+ public static void register(final Object o, final Class extends Event> clazz) {
+
+ for (final Method method : o.getClass().getDeclaredMethods()) {
+ if (!isMethodBad(method, clazz)) {
+ register(method, o);
+ }
+ }
+ }
+
+ private static void register(final Method method, final Object o) {
+
+ final Class> clazz = method.getParameterTypes()[0];
+ final Data methodData = new Data(o, method, method.getAnnotation(EventTarget.class).value());
+
+ if (!methodData.target.isAccessible()) {
+ methodData.target.setAccessible(true);
+ }
+
+ if (EventManager.REGISTRY_MAP.containsKey(clazz)) {
+ if (!EventManager.REGISTRY_MAP.get(clazz).contains(methodData)) {
+ EventManager.REGISTRY_MAP.get(clazz).add(methodData);
+ sortListValue((Class extends Event>) clazz);
+ }
+ } else {
+ EventManager.REGISTRY_MAP.put((Class extends Event>) clazz, new ArrayHelper() {
+
+ {
+ this.add(methodData);
+ }
+ });
+ }
+ }
+
+ public static void unregister(final Object o) {
+
+ for (final ArrayHelper flexibalArray : EventManager.REGISTRY_MAP.values()) {
+ for (final Data methodData : flexibalArray) {
+ if (methodData.source.equals(o)) {
+ flexibalArray.remove(methodData);
+ }
+ }
+ }
+
+ cleanMap(true);
+ }
+
+ public static void unregister(final Object o, final Class extends Event> clazz) {
+
+ if (EventManager.REGISTRY_MAP.containsKey(clazz)) {
+ for (final Data methodData : EventManager.REGISTRY_MAP.get(clazz)) {
+ if (methodData.source.equals(o)) {
+ EventManager.REGISTRY_MAP.get(clazz).remove(methodData);
+ }
+ }
+
+ cleanMap(true);
+ }
+ }
+
+
+ public static void cleanMap(final boolean b) {
+
+ final Iterator, ArrayHelper>> iterator = EventManager.REGISTRY_MAP.entrySet().iterator();
+
+ while (iterator.hasNext()) {
+ if (!b || iterator.next().getValue().isEmpty()) {
+ iterator.remove();
+ }
+ }
+ }
+
+ public static void removeEnty(final Class extends Event> clazz) {
+
+ final Iterator, ArrayHelper>> iterator = EventManager.REGISTRY_MAP.entrySet().iterator();
+
+ while (iterator.hasNext()) {
+ if (iterator.next().getKey().equals(clazz)) {
+ iterator.remove();
+ break;
+ }
+ }
+ }
+
+ private static void sortListValue(final Class extends Event> clazz) {
+
+ final ArrayHelper flexibleArray = new ArrayHelper();
+
+ for (final byte b : Priority.VALUE_ARRAY) {
+ for (final Data methodData : EventManager.REGISTRY_MAP.get(clazz)) {
+ if (methodData.priority == b) {
+ flexibleArray.add(methodData);
+ }
+ }
+ }
+
+ EventManager.REGISTRY_MAP.put(clazz, flexibleArray);
+ }
+
+ private static boolean isMethodBad(final Method method) {
+
+ return method.getParameterTypes().length != 1 || !method.isAnnotationPresent(EventTarget.class);
+ }
+
+ private static boolean isMethodBad(final Method method, final Class extends Event> clazz) {
+
+ return isMethodBad(method) || method.getParameterTypes()[0].equals(clazz);
+ }
+
+ public static ArrayHelper get(final Class extends Event> clazz) {
+
+ return EventManager.REGISTRY_MAP.get(clazz);
+ }
+
+ public static void shutdown() {
+
+ EventManager.REGISTRY_MAP.clear();
+ }
+
+ static {
+ REGISTRY_MAP = new HashMap, ArrayHelper>();
+ }
+
+}
diff --git a/src/minecraft/animeware/event/EventTarget.java b/src/minecraft/animeware/event/EventTarget.java
new file mode 100644
index 0000000..a5cb015
--- /dev/null
+++ b/src/minecraft/animeware/event/EventTarget.java
@@ -0,0 +1,16 @@
+package animeware.event;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Created by Hexeption on 18/12/2016.
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface EventTarget {
+
+ byte value() default 2;
+}
diff --git a/src/minecraft/animeware/event/Priority.java b/src/minecraft/animeware/event/Priority.java
new file mode 100644
index 0000000..82f5a9b
--- /dev/null
+++ b/src/minecraft/animeware/event/Priority.java
@@ -0,0 +1,16 @@
+package animeware.event;
+
+/**
+ * Created by Hexeption on 18/12/2016.
+ */
+public class Priority {
+
+ public static final byte FIRST = 0, SECOND = 1, THIRD = 2, FOURTH = 3, FIFTH = 4;
+
+ public static final byte[] VALUE_ARRAY;
+
+ static {
+ VALUE_ARRAY = new byte[]{0, 1, 2, 3, 4};
+ }
+
+}
diff --git a/src/minecraft/animeware/event/impl/AttackEntityEvent.java b/src/minecraft/animeware/event/impl/AttackEntityEvent.java
new file mode 100644
index 0000000..a256514
--- /dev/null
+++ b/src/minecraft/animeware/event/impl/AttackEntityEvent.java
@@ -0,0 +1,16 @@
+package animeware.event.impl;
+
+import animeware.event.Cancelable;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.player.EntityPlayer;
+
+@Cancelable
+public class AttackEntityEvent extends PlayerEvent
+{
+ public final Entity target;
+ public AttackEntityEvent(EntityPlayer player, Entity target)
+ {
+ super(player);
+ this.target = target;
+ }
+}
diff --git a/src/minecraft/animeware/event/impl/ClientTick.java b/src/minecraft/animeware/event/impl/ClientTick.java
new file mode 100644
index 0000000..7caffd2
--- /dev/null
+++ b/src/minecraft/animeware/event/impl/ClientTick.java
@@ -0,0 +1,7 @@
+package animeware.event.impl;
+
+import animeware.event.Event;
+
+public class ClientTick extends Event {
+
+}
diff --git a/src/minecraft/animeware/event/impl/EntityEvent.java b/src/minecraft/animeware/event/impl/EntityEvent.java
new file mode 100644
index 0000000..7df664c
--- /dev/null
+++ b/src/minecraft/animeware/event/impl/EntityEvent.java
@@ -0,0 +1,91 @@
+package animeware.event.impl;
+
+import animeware.event.Event;
+import net.minecraft.entity.Entity;
+
+/**
+ * EntityEvent is fired when an event involving any Entity occurs.
+ * If a method utilizes this {@link Event} as its parameter, the method will
+ * receive every child event of this class.
+ *
+ * {@link #entity} contains the entity that caused this event to occur.
+ *
+ * All children of this event are fired on the {@link MinecraftForge#EVENT_BUS}.
+ **/
+public class EntityEvent extends Event
+{
+ public final Entity entity;
+
+ public EntityEvent(Entity entity)
+ {
+ this.entity = entity;
+ }
+
+ /**
+ * EntityConstructing is fired when an Entity is being created.
+ * This event is fired within the constructor of the Entity.
+ *
+ * This event is not {@link Cancelable}.
+ *
+ * This event does not have a result. {@link HasResult}
+ *
+ * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ **/
+ public static class EntityConstructing extends EntityEvent
+ {
+ public EntityConstructing(Entity entity)
+ {
+ super(entity);
+ }
+ }
+
+ /**
+ * CanUpdate is fired when an Entity is being created.
+ * This event is fired whenever vanilla Minecraft determines that an entity
+ * cannot update in World#updateEntityWithOptionalForce(net.minecraft.entity.Entity, boolean)
+ *
+ * {@link CanUpdate#canUpdate} contains the boolean value of whether this entity can update.
+ * If the modder decides that this Entity can be updated, they may change canUpdate to true,
+ * and the entity with then be updated.
+ *
+ * This event is not {@link Cancelable}.
+ *
+ * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ **/
+ public static class CanUpdate extends EntityEvent
+ {
+ public boolean canUpdate = false;
+ public CanUpdate(Entity entity)
+ {
+ super(entity);
+ }
+ }
+
+ /**
+ * EnteringChunk is fired when an Entity enters a chunk.
+ * This event is fired whenever vanilla Minecraft determines that an entity
+ * is entering a chunk in Chunk#addEntity(net.minecraft.entity.Entity)
+ *
+ * This event is not {@link Cancelable}.
+ *
+ * This event does not have a result. {@link HasResult}
+ *
+ * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ **/
+ public static class EnteringChunk extends EntityEvent
+ {
+ public int newChunkX;
+ public int newChunkZ;
+ public int oldChunkX;
+ public int oldChunkZ;
+
+ public EnteringChunk(Entity entity, int newChunkX, int newChunkZ, int oldChunkX, int oldChunkZ)
+ {
+ super(entity);
+ this.newChunkX = newChunkX;
+ this.newChunkZ = newChunkZ;
+ this.oldChunkX = oldChunkX;
+ this.oldChunkZ = oldChunkZ;
+ }
+ }
+}
diff --git a/src/minecraft/animeware/event/impl/EventAttack.java b/src/minecraft/animeware/event/impl/EventAttack.java
new file mode 100644
index 0000000..73212ff
--- /dev/null
+++ b/src/minecraft/animeware/event/impl/EventAttack.java
@@ -0,0 +1,27 @@
+package animeware.event.impl;
+
+import animeware.event.Event;
+import net.minecraft.entity.Entity;
+
+public class EventAttack extends Event {
+ private Entity entity;
+ private boolean preAttack;
+
+ public void fire(Entity targetEntity, boolean preAttack) {
+ this.entity = targetEntity;
+ this.preAttack = preAttack;
+ //super.fire(targetEntity, preAttack);
+ }
+
+ public Entity getEntity() {
+ return entity;
+ }
+
+ public boolean isPreAttack() {
+ return preAttack;
+ }
+
+ public boolean isPostAttack() {
+ return !preAttack;
+ }
+}
diff --git a/src/minecraft/animeware/event/impl/EventChat.java b/src/minecraft/animeware/event/impl/EventChat.java
new file mode 100644
index 0000000..001c77f
--- /dev/null
+++ b/src/minecraft/animeware/event/impl/EventChat.java
@@ -0,0 +1,21 @@
+package animeware.event.impl;
+
+import animeware.event.Event;
+
+public class EventChat extends Event {
+
+ public String message;
+
+ public EventChat(String text) {
+ this.message = text;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+}
diff --git a/src/minecraft/animeware/event/impl/EventKey.java b/src/minecraft/animeware/event/impl/EventKey.java
new file mode 100644
index 0000000..0956f42
--- /dev/null
+++ b/src/minecraft/animeware/event/impl/EventKey.java
@@ -0,0 +1,19 @@
+package animeware.event.impl;
+
+import animeware.event.Event;
+
+public class EventKey extends Event {
+
+ public int code;
+
+ public EventKey(int code) {
+ this.code = code;
+ }
+ public int getCode() {
+ return code;
+ }
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+}
diff --git a/src/minecraft/animeware/event/impl/EventUpdate.java b/src/minecraft/animeware/event/impl/EventUpdate.java
new file mode 100644
index 0000000..390ab3c
--- /dev/null
+++ b/src/minecraft/animeware/event/impl/EventUpdate.java
@@ -0,0 +1,7 @@
+package animeware.event.impl;
+
+import animeware.event.Event;
+
+public class EventUpdate extends Event {
+
+}
diff --git a/src/minecraft/animeware/event/impl/GameLoopEvent.java b/src/minecraft/animeware/event/impl/GameLoopEvent.java
new file mode 100644
index 0000000..96c1480
--- /dev/null
+++ b/src/minecraft/animeware/event/impl/GameLoopEvent.java
@@ -0,0 +1,8 @@
+package animeware.event.impl;
+
+import animeware.event.Event;
+
+/** Fired every tick.
+ * @author Nora Cos | Nora#0001
+ * @since 1.0.0 **/
+public class GameLoopEvent extends Event { }
diff --git a/src/minecraft/animeware/event/impl/KeyEvent.java b/src/minecraft/animeware/event/impl/KeyEvent.java
new file mode 100644
index 0000000..2a95725
--- /dev/null
+++ b/src/minecraft/animeware/event/impl/KeyEvent.java
@@ -0,0 +1,16 @@
+package animeware.event.impl;
+
+import animeware.event.Event;
+
+public class KeyEvent extends Event {
+
+ private static int key;
+
+ public KeyEvent(int key) {
+ this.key = key;
+ }
+
+ public static int getKey() {
+ return key;
+ }
+}
diff --git a/src/minecraft/animeware/event/impl/LivingEvent.java b/src/minecraft/animeware/event/impl/LivingEvent.java
new file mode 100644
index 0000000..d60ecb3
--- /dev/null
+++ b/src/minecraft/animeware/event/impl/LivingEvent.java
@@ -0,0 +1,61 @@
+package animeware.event.impl;
+
+import animeware.event.Cancelable;
+import animeware.event.Event;
+import net.minecraft.entity.EntityLivingBase;
+
+/**
+ * LivingEvent is fired whenever an event involving Living entities occurs.
+ * If a method utilizes this {@link Event} as its parameter, the method will
+ * receive every child event of this class.
+ *
+ * All children of this event are fired on the {@link MinecraftForge#EVENT_BUS}.
+ **/
+public class LivingEvent extends EntityEvent
+{
+ public final EntityLivingBase entityLiving;
+ public LivingEvent(EntityLivingBase entity)
+ {
+ super(entity);
+ entityLiving = entity;
+ }
+
+ /**
+ * LivingUpdateEvent is fired when an Entity is updated.
+ * This event is fired whenever an Entity is updated in
+ * EntityLivingBase#onUpdate().
+ *
+ * This event is fired via the {@link ForgeHooks#onLivingUpdate(EntityLivingBase)}.
+ *
+ * This event is {@link Cancelable}.
+ * If this event is canceled, the Entity does not update.
+ *
+ * This event does not have a result. {@link HasResult}
+ *
+ * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ **/
+ @Cancelable
+ public static class LivingUpdateEvent extends LivingEvent
+ {
+ public LivingUpdateEvent(EntityLivingBase e){ super(e); }
+ }
+
+ /**
+ * LivingJumpEvent is fired when an Entity jumps.
+ * This event is fired whenever an Entity jumps in
+ * EntityLivingBase#jump(), EntityMagmaCube#jump(),
+ * and EntityHorse#jump().
+ *
+ * This event is fired via the {@link ForgeHooks#onLivingJump(EntityLivingBase)}.
+ *
+ * This event is not {@link Cancelable}.
+ *
+ * This event does not have a result. {@link HasResult}
+ *
+ * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ **/
+ public static class LivingJumpEvent extends LivingEvent
+ {
+ public LivingJumpEvent(EntityLivingBase e){ super(e); }
+ }
+}
diff --git a/src/minecraft/animeware/event/impl/PlayerEvent.java b/src/minecraft/animeware/event/impl/PlayerEvent.java
new file mode 100644
index 0000000..5d706b6
--- /dev/null
+++ b/src/minecraft/animeware/event/impl/PlayerEvent.java
@@ -0,0 +1,265 @@
+package animeware.event.impl;
+
+
+import java.io.File;
+
+import animeware.event.Cancelable;
+import animeware.event.Event;
+import net.minecraft.block.Block;
+import net.minecraft.block.state.IBlockState;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.util.BlockPos;
+
+/**
+ * PlayerEvent is fired whenever an event involving Living entities occurs.
+ * If a method utilizes this {@link Event} as its parameter, the method will
+ * receive every child event of this class.
+ *
+ * All children of this event are fired on the {@link MinecraftForge#EVENT_BUS}.
+ **/
+public class PlayerEvent extends LivingEvent
+{
+ public final EntityPlayer entityPlayer;
+ public PlayerEvent(EntityPlayer player)
+ {
+ super(player);
+ entityPlayer = player;
+ }
+
+ /**
+ * HarvestCheck is fired when a player attempts to harvest a block.
+ * This event is fired whenever a player attempts to harvest a block in
+ * EntityPlayer#canHarvestBlock(Block).
+ *
+ * This event is fired via the {@link ForgeEventFactory#doPlayerHarvestCheck(EntityPlayer, Block, boolean)}.
+ *
+ * {@link #block} contains the Block that is being checked for harvesting.
+ * {@link #success} contains the boolean value for whether the Block will be successfully harvested.
+ *
+ * This event is not {@link Cancelable}.
+ *
+ * This event does not have a result. {@link HasResult}
+ *
+ * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ **/
+ public static class HarvestCheck extends PlayerEvent
+ {
+ public final Block block;
+ public boolean success;
+
+ public HarvestCheck(EntityPlayer player, Block block, boolean success)
+ {
+ super(player);
+ this.block = block;
+ this.success = success;
+ }
+ }
+
+ /**
+ * BreakSpeed is fired when a player attempts to harvest a block.
+ * This event is fired whenever a player attempts to harvest a block in
+ * EntityPlayer#canHarvestBlock(Block).
+ *
+ * This event is fired via the {@link ForgeEventFactory#getBreakSpeed(EntityPlayer, IBlockState, float, BlockPos)}.
+ *
+ * {@link #state} contains the block being broken.
+ * {@link #originalSpeed} contains the original speed at which the player broke the block.
+ * {@link #newSpeed} contains the newSpeed at which the player will break the block.
+ * {@link #pos} contains the coordinates at which this event is occurring. Y value -1 means location is unknown.
+ *
+ * This event is {@link Cancelable}.
+ * If it is canceled, the player is unable to break the block.
+ *
+ * This event does not have a result. {@link HasResult}
+ *
+ * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ **/
+ @Cancelable
+ public static class BreakSpeed extends PlayerEvent
+ {
+ public final IBlockState state;
+ public final float originalSpeed;
+ public float newSpeed = 0.0f;
+ public final BlockPos pos; // Y position of -1 notes unknown location
+
+ public BreakSpeed(EntityPlayer player, IBlockState state, float original, BlockPos pos)
+ {
+ super(player);
+ this.state = state;
+ this.originalSpeed = original;
+ this.newSpeed = original;
+ this.pos = pos;
+ }
+ }
+
+ /**
+ * NameFormat is fired when a player's display name is retrieved.
+ * This event is fired whenever a player's name is retrieved in
+ * EntityPlayer#getDisplayName() or EntityPlayer#refreshDisplayName().
+ *
+ * This event is fired via the {@link ForgeEventFactory#getPlayerDisplayName(EntityPlayer, String)}.
+ *
+ * {@link #username} contains the username of the player.
+ * {@link #displayname} contains the display name of the player.
+ *
+ * This event is not {@link Cancelable}.
+ *
+ * This event does not have a result. {@link HasResult}
+ *
+ * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ **/
+ public static class NameFormat extends PlayerEvent
+ {
+ public final String username;
+ public String displayname;
+
+ public NameFormat(EntityPlayer player, String username) {
+ super(player);
+ this.username = username;
+ this.displayname = username;
+ }
+ }
+
+ /**
+ * Fired when the EntityPlayer is cloned, typically caused by the network sending a RESPAWN_PLAYER event.
+ * Either caused by death, or by traveling from the End to the overworld.
+ */
+ public static class Clone extends PlayerEvent
+ {
+ /**
+ * The old EntityPlayer that this new entity is a clone of.
+ */
+ public final EntityPlayer original;
+ /**
+ * True if this event was fired because the player died.
+ * False if it was fired because the entity switched dimensions.
+ */
+ public final boolean wasDeath;
+
+ public Clone(EntityPlayer _new, EntityPlayer oldPlayer, boolean wasDeath)
+ {
+ super(_new);
+ this.original = oldPlayer;
+ this.wasDeath = wasDeath;
+ }
+ }
+
+ /**
+ * Fired when an Entity is started to be "tracked" by this player (the player receives updates about this entity, e.g. motion).
+ *
+ */
+ public static class StartTracking extends PlayerEvent {
+
+ /**
+ * The Entity now being tracked.
+ */
+ public final Entity target;
+
+ public StartTracking(EntityPlayer player, Entity target)
+ {
+ super(player);
+ this.target = target;
+ }
+
+ }
+
+ /**
+ * Fired when an Entity is stopped to be "tracked" by this player (the player no longer receives updates about this entity, e.g. motion).
+ *
+ */
+ public static class StopTracking extends PlayerEvent {
+
+ /**
+ * The Entity no longer being tracked.
+ */
+ public final Entity target;
+
+ public StopTracking(EntityPlayer player, Entity target)
+ {
+ super(player);
+ this.target = target;
+ }
+
+ }
+
+ /**
+ * The player is being loaded from the world save. Note that the
+ * player won't have been added to the world yet. Intended to
+ * allow mods to load an additional file from the players directory
+ * containing additional mod related player data.
+ */
+ public static class LoadFromFile extends PlayerEvent {
+ /**
+ * The directory where player data is being stored. Use this
+ * to locate your mod additional file.
+ */
+ public final File playerDirectory;
+ /**
+ * The UUID is the standard for player related file storage.
+ * It is broken out here for convenience for quick file generation.
+ */
+ public final String playerUUID;
+
+ public LoadFromFile(EntityPlayer player, File originDirectory, String playerUUID)
+ {
+ super(player);
+ this.playerDirectory = originDirectory;
+ this.playerUUID = playerUUID;
+ }
+
+ /**
+ * Construct and return a recommended file for the supplied suffix
+ * @param suffix The suffix to use.
+ * @return
+ */
+ public File getPlayerFile(String suffix)
+ {
+ if ("dat".equals(suffix)) throw new IllegalArgumentException("The suffix 'dat' is reserved");
+ return new File(this.playerDirectory, this.playerUUID+"."+suffix);
+ }
+ }
+ /**
+ * The player is being saved to the world store. Note that the
+ * player may be in the process of logging out or otherwise departing
+ * from the world. Don't assume it's association with the world.
+ * This allows mods to load an additional file from the players directory
+ * containing additional mod related player data.
+ *
+ * Use this event to save the additional mod related player data to the world.
+ *
+ *
+ * WARNING: Do not overwrite the player's .dat file here. You will
+ * corrupt the world state.
+ */
+ public static class SaveToFile extends PlayerEvent {
+ /**
+ * The directory where player data is being stored. Use this
+ * to locate your mod additional file.
+ */
+ public final File playerDirectory;
+ /**
+ * The UUID is the standard for player related file storage.
+ * It is broken out here for convenience for quick file generation.
+ */
+ public final String playerUUID;
+
+ public SaveToFile(EntityPlayer player, File originDirectory, String playerUUID)
+ {
+ super(player);
+ this.playerDirectory = originDirectory;
+ this.playerUUID = playerUUID;
+ }
+
+ /**
+ * Construct and return a recommended file for the supplied suffix
+ * @param suffix The suffix to use.
+ * @return
+ */
+ public File getPlayerFile(String suffix)
+ {
+ if ("dat".equals(suffix)) throw new IllegalArgumentException("The suffix 'dat' is reserved");
+ return new File(this.playerDirectory, this.playerUUID+"."+suffix);
+ }
+ }
+}
diff --git a/src/minecraft/animeware/event/impl/Render3DEvent.java b/src/minecraft/animeware/event/impl/Render3DEvent.java
new file mode 100644
index 0000000..848efe4
--- /dev/null
+++ b/src/minecraft/animeware/event/impl/Render3DEvent.java
@@ -0,0 +1,23 @@
+package animeware.event.impl;
+
+import animeware.event.Event;
+
+
+public class Render3DEvent extends Event {
+
+ private float ticks;
+
+ public Render3DEvent(float ticks) {
+ this.ticks = ticks;
+ }
+
+
+ public float getTicks() {
+ return ticks;
+ }
+
+ public void setTicks(float ticks) {
+ this.ticks = ticks;
+ }
+
+}
diff --git a/src/minecraft/animeware/event/impl/RenderEvent.java b/src/minecraft/animeware/event/impl/RenderEvent.java
new file mode 100644
index 0000000..25951d3
--- /dev/null
+++ b/src/minecraft/animeware/event/impl/RenderEvent.java
@@ -0,0 +1,5 @@
+package animeware.event.impl;
+
+public class RenderEvent {
+
+}
diff --git a/src/minecraft/animeware/event/impl/WorldUnloadEvent.java b/src/minecraft/animeware/event/impl/WorldUnloadEvent.java
new file mode 100644
index 0000000..2c43c41
--- /dev/null
+++ b/src/minecraft/animeware/event/impl/WorldUnloadEvent.java
@@ -0,0 +1,17 @@
+package animeware.event.impl;
+
+import animeware.event.Event;
+import net.minecraft.world.World;
+
+public class WorldUnloadEvent extends Event {
+
+ private final World world;
+
+ public WorldUnloadEvent(World world) {
+ this.world = world;
+ }
+ public World getWorld() {
+ return world;
+ }
+
+}
diff --git a/src/minecraft/animeware/gui/alt/Alt.java b/src/minecraft/animeware/gui/alt/Alt.java
new file mode 100644
index 0000000..7a4794b
--- /dev/null
+++ b/src/minecraft/animeware/gui/alt/Alt.java
@@ -0,0 +1,38 @@
+package animeware.gui.alt;
+
+public final class Alt {
+ private String mask = "";
+ private final String username;
+ private String password;
+
+ public Alt(String username, String password) {
+ this(username, password, "");
+ }
+
+ public Alt(String username, String password, String mask) {
+ this.username = username;
+ this.password = password;
+ this.mask = mask;
+ }
+
+ public String getMask() {
+ return this.mask;
+ }
+
+ public String getPassword() {
+ return this.password;
+ }
+
+ public String getUsername() {
+ return this.username;
+ }
+
+ public void setMask(String mask) {
+ this.mask = mask;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+}
+
diff --git a/src/minecraft/animeware/gui/alt/AltLoginThread.java b/src/minecraft/animeware/gui/alt/AltLoginThread.java
new file mode 100644
index 0000000..874bd9a
--- /dev/null
+++ b/src/minecraft/animeware/gui/alt/AltLoginThread.java
@@ -0,0 +1,71 @@
+package animeware.gui.alt;
+
+import java.net.Proxy;
+
+import com.mojang.authlib.Agent;
+import com.mojang.authlib.exceptions.AuthenticationException;
+import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService;
+import com.mojang.authlib.yggdrasil.YggdrasilUserAuthentication;
+
+import animeware.NightSky;
+import net.minecraft.client.Minecraft;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.Session;
+
+public final class AltLoginThread
+extends Thread {
+ private final String password;
+ private String status;
+ private final String username;
+ private Minecraft mc = Minecraft.getMinecraft();
+
+ public AltLoginThread(String username, String password) {
+ super("Alt Login Thread");
+ this.username = username;
+ this.password = password;
+ this.status = (Object)((Object)EnumChatFormatting.GRAY) + "Waiting...";
+ }
+
+ private Session createSession(String username, String password) {
+ YggdrasilAuthenticationService service = new YggdrasilAuthenticationService(Proxy.NO_PROXY, "");
+ YggdrasilUserAuthentication auth = (YggdrasilUserAuthentication)service.createUserAuthentication(Agent.MINECRAFT);
+ auth.setUsername(username);
+ auth.setPassword(password);
+ try {
+ auth.logIn();
+ return new Session(auth.getSelectedProfile().getName(), auth.getSelectedProfile().getId().toString(), auth.getAuthenticatedToken(), "mojang");
+ }
+ catch (AuthenticationException localAuthenticationException) {
+ localAuthenticationException.printStackTrace();
+ return null;
+ }
+ }
+
+ public String getStatus() {
+ return this.status;
+ }
+
+ @Override
+ public void run() {
+ if (this.password.equals("")) {
+ this.mc.session = new Session(this.username, "", "", "mojang");
+ this.status = (Object)((Object)EnumChatFormatting.GREEN) + "Logged in. (" + this.username + " - offline name)";
+ return;
+ }
+ this.status = (Object)((Object)EnumChatFormatting.YELLOW) + "Logging in...";
+ Session auth = this.createSession(this.username, this.password);
+ if (auth == null) {
+ this.status = (Object)((Object)EnumChatFormatting.RED) + "Login failed!";
+ } else {
+ AltManager altManager = NightSky.INSTANCE.altManager;
+ AltManager.lastAlt = new Alt(this.username, this.password);
+ this.status = (Object)((Object)EnumChatFormatting.GREEN) + "Logged in. (" + auth.getUsername() + ")";
+ this.mc.session = auth;
+ }
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+}
+
diff --git a/src/minecraft/animeware/gui/alt/AltManager.java b/src/minecraft/animeware/gui/alt/AltManager.java
new file mode 100644
index 0000000..73672df
--- /dev/null
+++ b/src/minecraft/animeware/gui/alt/AltManager.java
@@ -0,0 +1,23 @@
+
+package animeware.gui.alt;
+
+import java.util.ArrayList;
+
+
+public class AltManager {
+ public static Alt lastAlt;
+ public static ArrayList registry;
+
+ static {
+ registry = new ArrayList();
+ }
+
+ public ArrayList getRegistry() {
+ return registry;
+ }
+
+ public void setLastAlt(Alt alt2) {
+ lastAlt = alt2;
+ }
+}
+
diff --git a/src/minecraft/animeware/gui/alt/GuiAddAlt.java b/src/minecraft/animeware/gui/alt/GuiAddAlt.java
new file mode 100644
index 0000000..1c854c9
--- /dev/null
+++ b/src/minecraft/animeware/gui/alt/GuiAddAlt.java
@@ -0,0 +1,150 @@
+
+package animeware.gui.alt;
+
+import java.io.IOException;
+import java.net.Proxy;
+
+import org.lwjgl.input.Keyboard;
+
+import com.mojang.authlib.Agent;
+import com.mojang.authlib.exceptions.AuthenticationException;
+import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService;
+import com.mojang.authlib.yggdrasil.YggdrasilUserAuthentication;
+
+import animeware.NightSky;
+import animeware.util.font.FontUtil;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.GuiTextField;
+import net.minecraft.util.EnumChatFormatting;
+
+
+public class GuiAddAlt
+extends GuiScreen {
+ private final GuiAltManager manager;
+ private PasswordField password;
+ private String status = (Object)((Object)EnumChatFormatting.GRAY) + "Idle...";
+ private GuiTextField username;
+
+ public GuiAddAlt(GuiAltManager manager) {
+ this.manager = manager;
+ }
+
+ @Override
+ protected void actionPerformed(GuiButton button) {
+ switch (button.id) {
+ case 0: {
+ AddAltThread login = new AddAltThread(this.username.getText(), this.password.getText());
+ login.start();
+ break;
+ }
+ case 1: {
+ this.mc.displayGuiScreen(this.manager);
+ }
+ }
+ }
+
+ @Override
+ public void drawScreen(int i2, int j2, float f2) {
+ this.drawDefaultBackground();
+ this.username.drawTextBox();
+ this.password.drawTextBox();
+ FontUtil.normal.drawCenteredString("Add Alt", width / 2, 20, -1);
+ if (this.username.getText().isEmpty()) {
+ FontUtil.normal.drawString("Username / E-Mail", width / 2 - 96, 66, -7829368);
+ }
+ if (this.password.getText().isEmpty()) {
+ FontUtil.normal.drawString("Password", width / 2 - 96, 106, -7829368);
+ }
+ FontUtil.normal.drawCenteredString(this.status, width / 2, 30, -1);
+ super.drawScreen(i2, j2, f2);
+ }
+
+ @Override
+ public void initGui() {
+ Keyboard.enableRepeatEvents(true);
+ this.buttonList.clear();
+ this.buttonList.add(new GuiButton(0, width / 2 - 100, height / 4 + 92 + 12, "Login"));
+ this.buttonList.add(new GuiButton(1, width / 2 - 100, height / 4 + 116 + 12, "Back"));
+ this.username = new GuiTextField(this.eventButton, this.mc.fontRendererObj, width / 2 - 100, 60, 200, 20);
+ this.password = new PasswordField(this.mc.fontRendererObj, width / 2 - 100, 100, 200, 20);
+ }
+
+ @Override
+ protected void keyTyped(char par1, int par2) {
+ this.username.textboxKeyTyped(par1, par2);
+ this.password.textboxKeyTyped(par1, par2);
+ if (par1 == '\t' && (this.username.isFocused() || this.password.isFocused())) {
+ this.username.setFocused(!this.username.isFocused());
+ this.password.setFocused(!this.password.isFocused());
+ }
+ if (par1 == '\r') {
+ this.actionPerformed((GuiButton)this.buttonList.get(0));
+ }
+ }
+
+ @Override
+ protected void mouseClicked(int par1, int par2, int par3) {
+ try {
+ super.mouseClicked(par1, par2, par3);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ this.username.mouseClicked(par1, par2, par3);
+ this.password.mouseClicked(par1, par2, par3);
+ }
+
+ static void access$0(GuiAddAlt guiAddAlt, String status) {
+ guiAddAlt.status = status;
+ }
+
+ private class AddAltThread
+ extends Thread {
+ private final String password;
+ private final String username;
+
+ public AddAltThread(String username, String password) {
+ this.username = username;
+ this.password = password;
+ GuiAddAlt.access$0(GuiAddAlt.this, (Object)((Object)EnumChatFormatting.GRAY) + "Idle...");
+ }
+
+ private final void checkAndAddAlt(String username, String password) throws IOException {
+ YggdrasilAuthenticationService service = new YggdrasilAuthenticationService(Proxy.NO_PROXY, "");
+ YggdrasilUserAuthentication auth = (YggdrasilUserAuthentication)service.createUserAuthentication(Agent.MINECRAFT);
+ auth.setUsername(username);
+ auth.setPassword(password);
+ try {
+ auth.logIn();
+ AltManager altManager = NightSky.INSTANCE.altManager;
+ AltManager.registry.add(new Alt(username, password, auth.getSelectedProfile().getName()));
+
+ GuiAddAlt.access$0(GuiAddAlt.this, "Alt added. (" + username + ")");
+ }
+ catch (AuthenticationException e) {
+ GuiAddAlt.access$0(GuiAddAlt.this, (Object)((Object)EnumChatFormatting.RED) + "Alt failed!");
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void run() {
+ if (this.password.equals("")) {
+ AltManager altManager = NightSky.INSTANCE.altManager;
+ AltManager.registry.add(new Alt(this.username, ""));
+ GuiAddAlt.access$0(GuiAddAlt.this, (Object)((Object)EnumChatFormatting.GREEN) + "Alt added. (" + this.username + " - offline name)");
+ return;
+ }
+ GuiAddAlt.access$0(GuiAddAlt.this, (Object)((Object)EnumChatFormatting.YELLOW) + "Trying alt...");
+ try {
+ this.checkAndAddAlt(this.username, this.password);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+}
+
diff --git a/src/minecraft/animeware/gui/alt/GuiAltLogin.java b/src/minecraft/animeware/gui/alt/GuiAltLogin.java
new file mode 100644
index 0000000..3b782b5
--- /dev/null
+++ b/src/minecraft/animeware/gui/alt/GuiAltLogin.java
@@ -0,0 +1,114 @@
+
+package animeware.gui.alt;
+
+import java.io.IOException;
+import java.util.List;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.GuiTextField;
+import net.minecraft.util.EnumChatFormatting;
+import org.lwjgl.input.Keyboard;
+
+import animeware.util.font.FontUtil;
+
+public final class GuiAltLogin
+extends GuiScreen {
+ private PasswordField password;
+ private final GuiScreen previousScreen;
+ private AltLoginThread thread;
+ private GuiTextField username;
+
+ public GuiAltLogin(GuiScreen previousScreen) {
+ this.previousScreen = previousScreen;
+ }
+
+ @Override
+ protected void actionPerformed(GuiButton button) {
+ switch (button.id) {
+ case 1: {
+ this.mc.displayGuiScreen(this.previousScreen);
+ break;
+ }
+ case 0: {
+ this.thread = new AltLoginThread(this.username.getText(), this.password.getText());
+ this.thread.start();
+ }
+ }
+ }
+
+ @Override
+ public void drawScreen(int x2, int y2, float z2) {
+ this.drawDefaultBackground();
+ this.username.drawTextBox();
+ this.password.drawTextBox();
+ FontUtil.normal.drawCenteredString("Alt Login", width / 2, 20, -1);
+ FontUtil.normal.drawCenteredString(this.thread == null ? (Object)((Object)EnumChatFormatting.GRAY) + "Idle..." : this.thread.getStatus(), width / 2, 29, -1);
+ if (this.username.getText().isEmpty()) {
+ FontUtil.normal.drawString("Username / E-Mail", width / 2 - 96, 66, -7829368);
+ }
+ if (this.password.getText().isEmpty()) {
+ FontUtil.normal.drawString("Password", width / 2 - 96, 106, -7829368);
+ }
+ super.drawScreen(x2, y2, z2);
+ }
+
+ @Override
+ public void initGui() {
+ int var3 = height / 4 + 24;
+ this.buttonList.add(new GuiButton(0, width / 2 - 100, var3 + 72 + 12, "Login"));
+ this.buttonList.add(new GuiButton(1, width / 2 - 100, var3 + 72 + 12 + 24, "Back"));
+ this.username = new GuiTextField(var3, this.mc.fontRendererObj, width / 2 - 100, 60, 200, 20);
+ this.password = new PasswordField(this.mc.fontRendererObj, width / 2 - 100, 100, 200, 20);
+ this.username.setFocused(true);
+ Keyboard.enableRepeatEvents(true);
+ }
+
+ @Override
+ protected void keyTyped(char character, int key) {
+ try {
+ super.keyTyped(character, key);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ if (character == '\t') {
+ if (!this.username.isFocused() && !this.password.isFocused()) {
+ this.username.setFocused(true);
+ } else {
+ this.username.setFocused(this.password.isFocused());
+ this.password.setFocused(!this.username.isFocused());
+ }
+ }
+ if (character == '\r') {
+ this.actionPerformed((GuiButton)this.buttonList.get(0));
+ }
+ this.username.textboxKeyTyped(character, key);
+ this.password.textboxKeyTyped(character, key);
+ }
+
+ @Override
+ protected void mouseClicked(int x2, int y2, int button) {
+ try {
+ super.mouseClicked(x2, y2, button);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ this.username.mouseClicked(x2, y2, button);
+ this.password.mouseClicked(x2, y2, button);
+ }
+
+ @Override
+ public void onGuiClosed() {
+ Keyboard.enableRepeatEvents(false);
+ }
+
+ @Override
+ public void updateScreen() {
+ this.username.updateCursorCounter();
+ this.password.updateCursorCounter();
+ }
+}
+
diff --git a/src/minecraft/animeware/gui/alt/GuiAltManager.java b/src/minecraft/animeware/gui/alt/GuiAltManager.java
new file mode 100644
index 0000000..e02616d
--- /dev/null
+++ b/src/minecraft/animeware/gui/alt/GuiAltManager.java
@@ -0,0 +1,212 @@
+
+package animeware.gui.alt;
+
+import java.io.IOException;
+
+import org.lwjgl.input.Keyboard;
+import org.lwjgl.input.Mouse;
+import org.lwjgl.opengl.GL11;
+
+import net.minecraft.client.gui.*;
+import net.minecraft.util.EnumChatFormatting;
+import animeware.NightSky;
+import animeware.util.font.FontUtil;
+
+public class GuiAltManager
+extends GuiScreen {
+ private GuiButton login;
+ private GuiButton remove;
+ private GuiButton rename;
+ public AltLoginThread loginThread;
+ private int offset;
+ public Alt selectedAlt = null;
+ private String status = (Object)((Object)EnumChatFormatting.GRAY) + "No alts selected";
+ //private TheAlteningAuthentication serviceSwitcher = TheAlteningAuthentication.mojang();
+
+ @Override
+ public void actionPerformed(GuiButton button) throws IOException {
+ switch (button.id) {
+ case 0: {
+ if (this.loginThread == null) {
+ this.mc.displayGuiScreen(null);
+ break;
+ }
+ if (!this.loginThread.getStatus().equals((Object)((Object)EnumChatFormatting.YELLOW) + "Attempting to log in") && !this.loginThread.getStatus().equals((Object)((Object)EnumChatFormatting.RED) + "Do not hit back!" + (Object)((Object)EnumChatFormatting.YELLOW) + " Logging in...")) {
+ this.mc.displayGuiScreen(null);
+ break;
+ }
+ this.loginThread.setStatus((Object)((Object)EnumChatFormatting.RED) + "Failed to login! Please try again!" + (Object)((Object)EnumChatFormatting.YELLOW) + " Logging in...");
+ break;
+ }
+ case 1: {
+ String user = this.selectedAlt.getUsername();
+ String pass = this.selectedAlt.getPassword();
+ this.loginThread = new AltLoginThread(user, pass);
+ this.loginThread.start();
+ break;
+ }
+ case 2: {
+ if (this.loginThread != null) {
+ this.loginThread = null;
+ }
+ AltManager altManager = NightSky.INSTANCE.altManager;
+ AltManager.registry.remove(this.selectedAlt);
+ this.status = "\u00a7aRemoved.";
+ this.selectedAlt = null;
+ break;
+ }
+ case 3: {
+ this.mc.displayGuiScreen(new GuiAddAlt(this));
+ break;
+ }
+ case 4: {
+ this.mc.displayGuiScreen(new GuiAltLogin(this));
+ break;
+ }
+
+ case 6: {
+ this.mc.displayGuiScreen(new GuiRenameAlt(this));
+ break;
+ }
+ }
+ }
+
+ @Override
+ public void drawScreen(int par1, int par2, float par3) {
+ if (Mouse.hasWheel()) {
+ int wheel = Mouse.getDWheel();
+ if (wheel < 0) {
+ this.offset += 26;
+ if (this.offset < 0) {
+ this.offset = 0;
+ }
+ } else if (wheel > 0) {
+ this.offset -= 26;
+ if (this.offset < 0) {
+ this.offset = 0;
+ }
+ }
+ }
+ this.drawDefaultBackground();
+ FontUtil.normal.drawString(this.mc.session.getUsername(), 10, 10, -7829368);
+ FontRenderer fontRendererObj = this.fontRendererObj;
+ StringBuilder sb2 = new StringBuilder("Account Manager - ");
+
+ FontUtil.normal.drawCenteredString(sb2.append(AltManager.registry.size()).append(" alts").toString(), width / 2, 10, -1);
+ FontUtil.normal.drawCenteredString(this.loginThread == null ? this.status : this.loginThread.getStatus(), width / 2, 20, -1);
+ Gui.drawRect(50, 33, width - 50, height - 50, -16777216);
+ GL11.glPushMatrix();
+ this.prepareScissorBox(0.0f, 33.0f, width, height - 50);
+ GL11.glEnable(3089);
+ int y2 = 38;
+ AltManager altManager2 = NightSky.INSTANCE.altManager;
+ for (Alt alt2 : AltManager.registry) {
+ if (!this.isAltInArea(y2)) continue;
+ String name = alt2.getMask().equals("") ? alt2.getUsername() : alt2.getMask();
+ String pass = alt2.getPassword().equals("") ? "\u00a7cCracked" : alt2.getPassword().replaceAll(".", "*");
+ if (alt2 == this.selectedAlt) {
+ if (this.isMouseOverAlt(par1, par2, y2 - this.offset) && Mouse.isButtonDown(0)) {
+ Gui.drawRect((int) 52.0f, y2 - this.offset - 4, width - 52, y2 - this.offset + 20, -2142943931);
+ } else if (this.isMouseOverAlt(par1, par2, y2 - this.offset)) {
+ Gui.drawRect((int) 52.0f, y2 - this.offset - 4, width - 52, y2 - this.offset + 20, -2142088622);
+ } else {
+ Gui.drawRect((int) 52.0f, y2 - this.offset - 4, width - 52, y2 - this.offset + 20, -2144259791);
+ }
+ } else if (this.isMouseOverAlt(par1, par2, y2 - this.offset) && Mouse.isButtonDown(0)) {
+ Gui.drawRect(y2 - this.offset - 4, width - 52, y2 - this.offset + 20, -16777216, -2146101995);
+ } else if (this.isMouseOverAlt(par1, par2, y2 - this.offset)) {
+ Gui.drawRect(y2 - this.offset - 4, width - 52, y2 - this.offset + 20, -16777216, -2145180893);
+ }
+ FontUtil.normal.drawCenteredString(name, width / 2, y2 - this.offset, -1);
+ FontUtil.normal.drawCenteredString(pass, width / 2, y2 - this.offset + 10, 5592405);
+ y2 += 26;
+ }
+ GL11.glDisable(3089);
+ GL11.glPopMatrix();
+ super.drawScreen(par1, par2, par3);
+ if (this.selectedAlt == null) {
+ this.login.enabled = false;
+ this.remove.enabled = false;
+ this.rename.enabled = false;
+ } else {
+ this.login.enabled = true;
+ this.remove.enabled = true;
+ this.rename.enabled = true;
+ }
+ if (Keyboard.isKeyDown(200)) {
+ this.offset -= 26;
+ if (this.offset < 0) {
+ this.offset = 0;
+ }
+ } else if (Keyboard.isKeyDown(208)) {
+ this.offset += 26;
+ if (this.offset < 0) {
+ this.offset = 0;
+ }
+ }
+ }
+
+ @Override
+ public void initGui() {
+ this.buttonList.add(new GuiButton(0, width / 2 + 4 + 50, height - 24, 100, 20, "Cancel"));
+ this.login = new GuiButton(1, width / 2 - 154, height - 48, 100, 20, "Login");
+ this.buttonList.add(this.login);
+ this.remove = new GuiButton(2, width / 2 - 154, height - 24, 100, 20, "Remove");
+ this.buttonList.add(this.remove);
+ this.buttonList.add(new GuiButton(3, width / 2 + 4 + 50, height - 48, 100, 20, "Add"));
+ this.buttonList.add(new GuiButton(4, width / 2 - 50, height - 48, 100, 20, "Direct Login"));
+ this.rename = new GuiButton(6, width / 2 - 50, height - 24, 100, 20, "Edit");
+ this.buttonList.add(this.rename);
+ //this.buttonList.add(new GuiButton(7, width - 100, 0, 100, 20, "Use Mojang"));
+ //this.buttonList.add(new GuiButton(8, width - 200, 0, 100, 20, "Use TheAltening"));
+ this.login.enabled = false;
+ this.remove.enabled = false;
+ this.rename.enabled = false;
+ }
+
+ private boolean isAltInArea(int y2) {
+ if (y2 - this.offset <= height - 50) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean isMouseOverAlt(int x2, int y2, int y1) {
+ if (x2 >= 52 && y2 >= y1 - 4 && x2 <= width - 52 && y2 <= y1 + 20 && x2 >= 0 && y2 >= 33 && x2 <= width && y2 <= height - 50) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ protected void mouseClicked(int par1, int par2, int par3) throws IOException {
+ if (this.offset < 0) {
+ this.offset = 0;
+ }
+ int y2 = 38 - this.offset;
+ AltManager altManager = NightSky.INSTANCE.altManager;
+ for (Alt alt2 : AltManager.registry) {
+ if (this.isMouseOverAlt(par1, par2, y2)) {
+ if (alt2 == this.selectedAlt) {
+ this.actionPerformed((GuiButton)this.buttonList.get(1));
+ return;
+ }
+ this.selectedAlt = alt2;
+ }
+ y2 += 26;
+ }
+ try {
+ super.mouseClicked(par1, par2, par3);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void prepareScissorBox(float x2, float y2, float x22, float y22) {
+ ScaledResolution scale = new ScaledResolution(this.mc);
+ int factor = scale.getScaleFactor();
+ GL11.glScissor((int)(x2 * (float)factor), (int)(((float)scale.getScaledHeight() - y22) * (float)factor), (int)((x22 - x2) * (float)factor), (int)((y22 - y2) * (float)factor));
+ }
+}
+
diff --git a/src/minecraft/animeware/gui/alt/GuiRenameAlt.java b/src/minecraft/animeware/gui/alt/GuiRenameAlt.java
new file mode 100644
index 0000000..e67e051
--- /dev/null
+++ b/src/minecraft/animeware/gui/alt/GuiRenameAlt.java
@@ -0,0 +1,90 @@
+
+package animeware.gui.alt;
+
+import java.io.IOException;
+import java.util.List;
+
+import animeware.util.font.FontUtil;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.GuiTextField;
+import net.minecraft.util.EnumChatFormatting;
+
+public class GuiRenameAlt
+extends GuiScreen {
+ private final GuiAltManager manager;
+ private GuiTextField nameField;
+ private PasswordField pwField;
+ private String status = (Object)((Object)EnumChatFormatting.GRAY) + "Waiting...";
+
+ public GuiRenameAlt(GuiAltManager manager) {
+ this.manager = manager;
+ }
+
+ @Override
+ public void actionPerformed(GuiButton button) {
+ switch (button.id) {
+ case 1: {
+ this.mc.displayGuiScreen(this.manager);
+ break;
+ }
+ case 0: {
+ this.manager.selectedAlt.setMask(this.nameField.getText());
+ this.manager.selectedAlt.setPassword(this.pwField.getText());
+ this.status = "Edited!";
+ }
+ }
+ }
+
+ @Override
+ public void drawScreen(int par1, int par2, float par3) {
+ this.drawDefaultBackground();
+ FontUtil.normal.drawCenteredString("Edit Alt", width / 2, 10, -1);
+ FontUtil.normal.drawCenteredString(this.status, width / 2, 20, -1);
+ this.nameField.drawTextBox();
+ this.pwField.drawTextBox();
+ if (this.nameField.getText().isEmpty()) {
+ FontUtil.normal.drawString("New name", width / 2 - 96, 66, -7829368);
+ }
+ if (this.pwField.getText().isEmpty()) {
+ FontUtil.normal.drawString("New password", width / 2 - 96, 106, -7829368);
+ }
+ super.drawScreen(par1, par2, par3);
+ }
+
+ @Override
+ public void initGui() {
+ this.buttonList.add(new GuiButton(0, width / 2 - 100, height / 4 + 92 + 12, "Edit"));
+ this.buttonList.add(new GuiButton(1, width / 2 - 100, height / 4 + 116 + 12, "Cancel"));
+ this.nameField = new GuiTextField(this.eventButton, this.mc.fontRendererObj, width / 2 - 100, 60, 200, 20);
+ this.pwField = new PasswordField(this.mc.fontRendererObj, width / 2 - 100, 100, 200, 20);
+ }
+
+ @Override
+ protected void keyTyped(char par1, int par2) {
+ this.nameField.textboxKeyTyped(par1, par2);
+ this.pwField.textboxKeyTyped(par1, par2);
+ if (par1 == '\t' && (this.nameField.isFocused() || this.pwField.isFocused())) {
+ this.nameField.setFocused(!this.nameField.isFocused());
+ this.pwField.setFocused(!this.pwField.isFocused());
+ }
+ if (par1 == '\r') {
+ this.actionPerformed((GuiButton)this.buttonList.get(0));
+ }
+ }
+
+ @Override
+ protected void mouseClicked(int par1, int par2, int par3) {
+ try {
+ super.mouseClicked(par1, par2, par3);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ this.nameField.mouseClicked(par1, par2, par3);
+ this.pwField.mouseClicked(par1, par2, par3);
+ }
+}
+
diff --git a/src/minecraft/animeware/gui/alt/PasswordField.java b/src/minecraft/animeware/gui/alt/PasswordField.java
new file mode 100644
index 0000000..931df91
--- /dev/null
+++ b/src/minecraft/animeware/gui/alt/PasswordField.java
@@ -0,0 +1,506 @@
+
+package animeware.gui.alt;
+
+import net.minecraft.util.*;
+import net.minecraft.client.gui.*;
+import net.minecraft.client.*;
+import org.lwjgl.opengl.*;
+import net.minecraft.client.renderer.*;
+
+import net.minecraft.util.*;
+import net.minecraft.client.gui.*;
+import net.minecraft.client.*;
+import org.lwjgl.opengl.*;
+import net.minecraft.client.renderer.*;
+
+public class PasswordField extends Gui
+{
+ private final FontRenderer fontRenderer;
+ private final int xPos;
+ private final int yPos;
+ private final int width;
+ private final int height;
+ private String text;
+ private int maxStringLength;
+ private int cursorCounter;
+ private boolean enableBackgroundDrawing;
+ private boolean canLoseFocus;
+ public boolean isFocused;
+ private boolean isEnabled;
+ private int i;
+ private int cursorPosition;
+ private int selectionEnd;
+ private int enabledColor;
+ private int disabledColor;
+ private boolean b;
+
+ public PasswordField(final FontRenderer par1FontRenderer, final int par2, final int par3, final int par4, final int par5) {
+ this.text = "";
+ this.maxStringLength = 50;
+ this.enableBackgroundDrawing = true;
+ this.canLoseFocus = true;
+ this.isFocused = false;
+ this.isEnabled = true;
+ this.i = 0;
+ this.cursorPosition = 0;
+ this.selectionEnd = 0;
+ this.enabledColor = 14737632;
+ this.disabledColor = 7368816;
+ this.b = true;
+ this.fontRenderer = par1FontRenderer;
+ this.xPos = par2;
+ this.yPos = par3;
+ this.width = par4;
+ this.height = par5;
+ }
+
+ public void updateCursorCounter() {
+ ++this.cursorCounter;
+ }
+
+ public void setText(final String par1Str) {
+ if (par1Str.length() > this.maxStringLength) {
+ this.text = par1Str.substring(0, this.maxStringLength);
+ }
+ else {
+ this.text = par1Str;
+ }
+ this.setCursorPositionEnd();
+ }
+
+ public String getText() {
+ final String newtext = this.text.replaceAll(" ", "");
+ return newtext;
+ }
+
+ public String getSelectedtext() {
+ final int var1 = (this.cursorPosition < this.selectionEnd) ? this.cursorPosition : this.selectionEnd;
+ final int var2 = (this.cursorPosition < this.selectionEnd) ? this.selectionEnd : this.cursorPosition;
+ return this.text.substring(var1, var2);
+ }
+
+ public void writeText(final String par1Str) {
+ String var2 = "";
+ final String var3 = ChatAllowedCharacters.filterAllowedCharacters(par1Str);
+ final int var4 = (this.cursorPosition < this.selectionEnd) ? this.cursorPosition : this.selectionEnd;
+ final int var5 = (this.cursorPosition < this.selectionEnd) ? this.selectionEnd : this.cursorPosition;
+ final int var6 = this.maxStringLength - this.text.length() - (var4 - this.selectionEnd);
+ final boolean var7 = false;
+ if (this.text.length() > 0) {
+ var2 = String.valueOf(String.valueOf(var2)) + this.text.substring(0, var4);
+ }
+ int var8;
+ if (var6 < var3.length()) {
+ var2 = String.valueOf(String.valueOf(var2)) + var3.substring(0, var6);
+ var8 = var6;
+ }
+ else {
+ var2 = String.valueOf(String.valueOf(var2)) + var3;
+ var8 = var3.length();
+ }
+ if (this.text.length() > 0 && var5 < this.text.length()) {
+ var2 = String.valueOf(String.valueOf(var2)) + this.text.substring(var5);
+ }
+ this.text = var2.replaceAll(" ", "");
+ this.cursorPos(var4 - this.selectionEnd + var8);
+ }
+
+ public void func_73779_a(final int par1) {
+ if (this.text.length() != 0) {
+ if (this.selectionEnd != this.cursorPosition) {
+ this.writeText("");
+ }
+ else {
+ this.deleteFromCursor(this.getNthWordFromCursor(par1) - this.cursorPosition);
+ }
+ }
+ }
+
+ public void deleteFromCursor(final int par1) {
+ if (this.text.length() != 0) {
+ if (this.selectionEnd != this.cursorPosition) {
+ this.writeText("");
+ }
+ else {
+ final boolean var2 = par1 < 0;
+ final int var3 = var2 ? (this.cursorPosition + par1) : this.cursorPosition;
+ final int var4 = var2 ? this.cursorPosition : (this.cursorPosition + par1);
+ String var5 = "";
+ if (var3 >= 0) {
+ var5 = this.text.substring(0, var3);
+ }
+ if (var4 < this.text.length()) {
+ var5 = String.valueOf(String.valueOf(var5)) + this.text.substring(var4);
+ }
+ this.text = var5;
+ if (var2) {
+ this.cursorPos(par1);
+ }
+ }
+ }
+ }
+
+ public int getNthWordFromCursor(final int par1) {
+ return this.getNthWordFromPos(par1, this.getCursorPosition());
+ }
+
+ public int getNthWordFromPos(final int par1, final int par2) {
+ return this.type(par1, this.getCursorPosition(), true);
+ }
+
+ public int type(final int par1, final int par2, final boolean par3) {
+ int var4 = par2;
+ final boolean var5 = par1 < 0;
+ for (int var6 = Math.abs(par1), var7 = 0; var7 < var6; ++var7) {
+ if (!var5) {
+ final int var8 = this.text.length();
+ var4 = this.text.indexOf(32, var4);
+ if (var4 == -1) {
+ var4 = var8;
+ }
+ else {
+ while (par3) {
+ if (var4 >= var8) {
+ break;
+ }
+ if (this.text.charAt(var4) != ' ') {
+ break;
+ }
+ ++var4;
+ }
+ }
+ }
+ else {
+ while (par3) {
+ if (var4 <= 0) {
+ break;
+ }
+ if (this.text.charAt(var4 - 1) != ' ') {
+ break;
+ }
+ --var4;
+ }
+ while (var4 > 0 && this.text.charAt(var4 - 1) != ' ') {
+ --var4;
+ }
+ }
+ }
+ return var4;
+ }
+
+ public void cursorPos(final int par1) {
+ this.setCursorPosition(this.selectionEnd + par1);
+ }
+
+ public void setCursorPosition(final int par1) {
+ this.cursorPosition = par1;
+ final int var2 = this.text.length();
+ if (this.cursorPosition < 0) {
+ this.cursorPosition = 0;
+ }
+ if (this.cursorPosition > var2) {
+ this.cursorPosition = var2;
+ }
+ this.func_73800_i(this.cursorPosition);
+ }
+
+ public void setCursorPositionZero() {
+ this.setCursorPosition(0);
+ }
+
+ public void setCursorPositionEnd() {
+ this.setCursorPosition(this.text.length());
+ }
+
+ public boolean textboxKeyTyped(final char par1, final int par2) {
+ if (!this.isEnabled || !this.isFocused) {
+ return false;
+ }
+ switch (par1) {
+ case '\u0001': {
+ this.setCursorPositionEnd();
+ this.func_73800_i(0);
+ return true;
+ }
+ case '\u0003': {
+ GuiScreen.setClipboardString(this.getSelectedtext());
+ return true;
+ }
+ case '\u0016': {
+ this.writeText(GuiScreen.getClipboardString());
+ return true;
+ }
+ case '\u0018': {
+ GuiScreen.setClipboardString(this.getSelectedtext());
+ this.writeText("");
+ return true;
+ }
+ default: {
+ switch (par2) {
+ case 14: {
+ if (GuiScreen.isCtrlKeyDown()) {
+ this.func_73779_a(-1);
+ }
+ else {
+ this.deleteFromCursor(-1);
+ }
+ return true;
+ }
+ case 199: {
+ if (GuiScreen.isShiftKeyDown()) {
+ this.func_73800_i(0);
+ }
+ else {
+ this.setCursorPositionZero();
+ }
+ return true;
+ }
+ case 203: {
+ if (GuiScreen.isShiftKeyDown()) {
+ if (GuiScreen.isCtrlKeyDown()) {
+ this.func_73800_i(this.getNthWordFromPos(-1, this.getSelectionEnd()));
+ }
+ else {
+ this.func_73800_i(this.getSelectionEnd() - 1);
+ }
+ }
+ else if (GuiScreen.isCtrlKeyDown()) {
+ this.setCursorPosition(this.getNthWordFromCursor(-1));
+ }
+ else {
+ this.cursorPos(-1);
+ }
+ return true;
+ }
+ case 205: {
+ if (GuiScreen.isShiftKeyDown()) {
+ if (GuiScreen.isCtrlKeyDown()) {
+ this.func_73800_i(this.getNthWordFromPos(1, this.getSelectionEnd()));
+ }
+ else {
+ this.func_73800_i(this.getSelectionEnd() + 1);
+ }
+ }
+ else if (GuiScreen.isCtrlKeyDown()) {
+ this.setCursorPosition(this.getNthWordFromCursor(1));
+ }
+ else {
+ this.cursorPos(1);
+ }
+ return true;
+ }
+ case 207: {
+ if (GuiScreen.isShiftKeyDown()) {
+ this.func_73800_i(this.text.length());
+ }
+ else {
+ this.setCursorPositionEnd();
+ }
+ return true;
+ }
+ case 211: {
+ if (GuiScreen.isCtrlKeyDown()) {
+ this.func_73779_a(1);
+ }
+ else {
+ this.deleteFromCursor(1);
+ }
+ return true;
+ }
+ default: {
+ if (ChatAllowedCharacters.isAllowedCharacter(par1)) {
+ this.writeText(Character.toString(par1));
+ return true;
+ }
+ return false;
+ }
+ }
+ }
+ }
+ }
+
+ public void mouseClicked(final int par1, final int par2, final int par3) {
+ final boolean var4 = par1 >= this.xPos && par1 < this.xPos + this.width && par2 >= this.yPos && par2 < this.yPos + this.height;
+ if (this.canLoseFocus) {
+ this.setFocused(this.isEnabled && var4);
+ }
+ if (this.isFocused && par3 == 0) {
+ int var5 = par1 - this.xPos;
+ if (this.enableBackgroundDrawing) {
+ var5 -= 4;
+ }
+ final String var6 = this.fontRenderer.trimStringToWidth(this.text.substring(this.i), this.getWidth());
+ this.setCursorPosition(this.fontRenderer.trimStringToWidth(var6, var5).length() + this.i);
+ }
+ }
+
+ public void drawTextBox() {
+ if (this.func_73778_q()) {
+ if (this.getEnableBackgroundDrawing()) {
+ Gui.drawRect(this.xPos - 1, this.yPos - 1, this.xPos + this.width + 1, this.yPos + this.height + 1, -6250336);
+ Gui.drawRect(this.xPos, this.yPos, this.xPos + this.width, this.yPos + this.height, -16777216);
+ }
+ final int var1 = this.isEnabled ? this.enabledColor : this.disabledColor;
+ final int var2 = this.cursorPosition - this.i;
+ int var3 = this.selectionEnd - this.i;
+ final String var4 = this.fontRenderer.trimStringToWidth(this.text.substring(this.i), this.getWidth());
+ final boolean var5 = var2 >= 0 && var2 <= var4.length();
+ final boolean var6 = this.isFocused && this.cursorCounter / 6 % 2 == 0 && var5;
+ final int var7 = this.enableBackgroundDrawing ? (this.xPos + 4) : this.xPos;
+ final int var8 = this.enableBackgroundDrawing ? (this.yPos + (this.height - 8) / 2) : this.yPos;
+ int var9 = var7;
+ if (var3 > var4.length()) {
+ var3 = var4.length();
+ }
+ if (var4.length() > 0) {
+ if (var5) {
+ var4.substring(0, var2);
+ }
+ var9 = Minecraft.getMinecraft().fontRendererObj.drawStringWithShadow(this.text.replaceAll("(?s).", "*"), var7, var8, var1);
+ }
+ final boolean var10 = this.cursorPosition < this.text.length() || this.text.length() >= this.getMaxStringLength();
+ int var11 = var9;
+ if (!var5) {
+ var11 = ((var2 > 0) ? (var7 + this.width) : var7);
+ }
+ else if (var10) {
+ var11 = var9 - 1;
+ --var9;
+ }
+ if (var4.length() > 0 && var5 && var2 < var4.length()) {
+ Minecraft.getMinecraft().fontRendererObj.drawStringWithShadow(var4.substring(var2), var9, var8, var1);
+ }
+ if (var6) {
+ if (var10) {
+ Gui.drawRect(var11, var8 - 1, var11 + 1, var8 + 1 + this.fontRenderer.FONT_HEIGHT, -3092272);
+ }
+ else {
+ Minecraft.getMinecraft().fontRendererObj.drawStringWithShadow("_", var11, var8, var1);
+ }
+ }
+ if (var3 != var2) {
+ final int var12 = var7 + this.fontRenderer.getStringWidth(var4.substring(0, var3));
+ this.drawCursorVertical(var11, var8 - 1, var12 - 1, var8 + 1 + this.fontRenderer.FONT_HEIGHT);
+ }
+ }
+ }
+
+ private void drawCursorVertical(int par1, int par2, int par3, int par4) {
+ if (par1 < par3) {
+ final int var5 = par1;
+ par1 = par3;
+ par3 = var5;
+ }
+ if (par2 < par4) {
+ final int var5 = par2;
+ par2 = par4;
+ par4 = var5;
+ }
+ final Tessellator var6 = Tessellator.getInstance();
+ final WorldRenderer var7 = var6.getWorldRenderer();
+ GL11.glColor4f(0.0f, 0.0f, 255.0f, 255.0f);
+ GL11.glDisable(3553);
+ GL11.glEnable(3058);
+ GL11.glLogicOp(5387);
+ var7.begin(7, var7.getVertexFormat());
+ var7.pos(par1, par4, 0.0);
+ var7.pos(par3, par4, 0.0);
+ var7.pos(par3, par2, 0.0);
+ var7.pos(par1, par2, 0.0);
+ var7.finishDrawing();
+ GL11.glDisable(3058);
+ GL11.glEnable(3553);
+ }
+
+ public void setMaxStringLength(final int par1) {
+ this.maxStringLength = par1;
+ if (this.text.length() > par1) {
+ this.text = this.text.substring(0, par1);
+ }
+ }
+
+ public int getMaxStringLength() {
+ return this.maxStringLength;
+ }
+
+ public int getCursorPosition() {
+ return this.cursorPosition;
+ }
+
+ public boolean getEnableBackgroundDrawing() {
+ return this.enableBackgroundDrawing;
+ }
+
+ public void setEnableBackgroundDrawing(final boolean par1) {
+ this.enableBackgroundDrawing = par1;
+ }
+
+ public void func_73794_g(final int par1) {
+ this.enabledColor = par1;
+ }
+
+ public void setFocused(final boolean par1) {
+ if (par1 && !this.isFocused) {
+ this.cursorCounter = 0;
+ }
+ this.isFocused = par1;
+ }
+
+ public boolean isFocused() {
+ return this.isFocused;
+ }
+
+ public int getSelectionEnd() {
+ return this.selectionEnd;
+ }
+
+ public int getWidth() {
+ return this.getEnableBackgroundDrawing() ? (this.width - 8) : this.width;
+ }
+
+ public void func_73800_i(int par1) {
+ final int var2 = this.text.length();
+ if (par1 > var2) {
+ par1 = var2;
+ }
+ if (par1 < 0) {
+ par1 = 0;
+ }
+ this.selectionEnd = par1;
+ if (this.fontRenderer != null) {
+ if (this.i > var2) {
+ this.i = var2;
+ }
+ final int var3 = this.getWidth();
+ final String var4 = this.fontRenderer.trimStringToWidth(this.text.substring(this.i), var3);
+ final int var5 = var4.length() + this.i;
+ if (par1 == this.i) {
+ this.i -= this.fontRenderer.trimStringToWidth(this.text, var3, true).length();
+ }
+ if (par1 > var5) {
+ this.i += par1 - var5;
+ }
+ else if (par1 <= this.i) {
+ this.i -= this.i - par1;
+ }
+ if (this.i < 0) {
+ this.i = 0;
+ }
+ if (this.i > var2) {
+ this.i = var2;
+ }
+ }
+ }
+
+ public void setCanLoseFocus(final boolean par1) {
+ this.canLoseFocus = par1;
+ }
+
+ public boolean func_73778_q() {
+ return this.b;
+ }
+
+ public void func_73790_e(final boolean par1) {
+ this.b = par1;
+ }
+}
diff --git a/src/minecraft/animeware/gui/clickgui/ClickGUI.java b/src/minecraft/animeware/gui/clickgui/ClickGUI.java
new file mode 100644
index 0000000..ddd937f
--- /dev/null
+++ b/src/minecraft/animeware/gui/clickgui/ClickGUI.java
@@ -0,0 +1,823 @@
+package animeware.gui.clickgui;
+
+import java.awt.Color;
+import java.awt.Desktop;
+import java.io.IOException;
+import java.net.URI;
+import java.util.ArrayList;
+
+import org.lwjgl.input.Keyboard;
+import org.lwjgl.input.Mouse;
+import org.lwjgl.opengl.GL11;
+
+import animeware.NightSky;
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.cosmetic.CosmeticType;
+import animeware.hud.Category;
+import animeware.hud.DraggableComponent;
+import animeware.hud.HUDConfigScreen;
+import animeware.hud.mod.HudMod;
+import animeware.ui.comp.CosmeticButton;
+import animeware.ui.comp.CosmeticsCGButton;
+import animeware.ui.comp.HomeCGButton;
+import animeware.ui.comp.LArrowBtn;
+import animeware.ui.comp.LogoButtonWhite;
+import animeware.ui.comp.SettingsCGButton;
+import animeware.ui.comp.PositioningCGButton;
+import animeware.ui.comp.ToggleableCGButton;
+import animeware.ui.comp.clickgui.ModButton;
+import animeware.ui.comp.clickgui.SettingButton;
+import animeware.ui.login.PasswordField;
+import animeware.ui.themes.impl.ThemeButton;
+import animeware.util.render.DrawUtil;
+import animeware.util.render.GLUtils;
+import animeware.util.render.RenderUtil;
+import animeware.util.render.RoundedUtils;
+import animeware.util.render.ui.ClickGUIUtil;
+import animeware.util.settings.BooleanSetting;
+import animeware.util.settings.ModeSetting;
+import animeware.util.settings.Setting;
+import animeware.util.settings.comp.BooleanButton;
+import animeware.util.settings.comp.ModeButton;
+import net.arikia.dev.drpc.DiscordUser;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.GuiTextField;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.OpenGlHelper;
+import net.minecraft.client.renderer.RenderHelper;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.entity.RenderManager;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.util.ResourceLocation;
+
+public class ClickGUI extends GuiScreen {
+
+ boolean guiOpen;
+
+ //DiscordUser user;
+
+ public boolean CGSett;
+ public boolean cgon;
+ public static boolean btnHovered;
+
+ private int field_146445_a;
+ private int field_146444_f;
+
+ float anim = 0.0F;
+ boolean animated;
+
+ private float currentScroll;
+
+ HudMod m;
+
+ HudMod preM;
+
+ public static boolean settings;
+
+ private static String TntTime = "TntTimer";
+
+ public int x, y, w, h;
+
+ ArrayList cosButtons = new ArrayList<>();
+ ArrayList modButtons = new ArrayList<>();
+ ArrayList tButtons = new ArrayList<>();
+ public static ArrayList settingButtons = new ArrayList<>();
+ public DraggableComponent drag;
+
+ public static GUIType type = GUIType.CLICK;
+ public static GUITheme theme = GUITheme.DARK;
+
+ boolean hovered;
+ boolean hud;
+ public static DraggableComponent top;
+ //public int x, y;
+ public Category viewing;
+ public HudMod configuring;
+ public static GuiTextField searchBar;
+ ArrayList textFields = new ArrayList<>();
+ EntityLivingBase entity;
+ static float rotate;
+ GuiScreen guiScreen;
+ //int Button;
+
+ public ClickGUI() {
+ //this.x = x;
+ //this.y = y;
+
+ this.top = new DraggableComponent(100, 100, 177, 20, new Color(0,140,255, 0).getRGB());
+ }
+ public ClickGUI(HudMod mod) {
+ this.m = mod;
+ this.preM = mod;
+ this.m = preM;
+ //this.x = x;
+ //this.y = y;
+
+ //this.top = new DraggableComponent(100, 100, 177, 20, new Color(0,140,255, 0).getRGB());
+ }
+
+ public void checkMouseWheel(int mouseX, int mouseY) {
+ int mouseScroll = Mouse.getDWheel();
+
+ if(mouseScroll > 0) {
+ for(ModButton b : modButtons) {
+ b.y += 15;
+ }
+ } else if(mouseScroll < 0) {
+ for(ModButton b : modButtons) {
+ b.y -= 15;
+ }
+ }
+
+ }
+ public void checkMouseWheelCosmetic(int mouseX, int mouseY) {
+ int mouseScrollCos = Mouse.getDWheel();
+
+ if(mouseScrollCos > 0) {
+ for(CosmeticButton b : cosButtons) {
+ b.y += 15;
+ }
+ } else if(mouseScrollCos < 0) {
+ for(CosmeticButton b : cosButtons) {
+ b.y -= 15;
+ }
+ }
+ }
+
+ @Override
+ public void initGui() {
+ this.guiOpen = true;
+ super.initGui();
+ mc.entityRenderer.loadShader(new ResourceLocation("Animeware/blur.json"));
+ //mc.entityRenderer.loadShader(new ResourceLocation("Animeware/blur.json"));
+ this.anim = 80.0F;
+ super.initGui();
+ this.field_146445_a = 0;
+ this.buttonList.clear();
+ int i = -16;
+ int j = 98;
+
+ //if (this.anim > 0.0F)
+ //this.anim -= 6.0F;
+ //GL11.glEnable(3089);
+ //GLUtils.makeScissorBox((this.width / 2 - 190) + this.anim, (this.height / 2 - 110) + this.anim, (this.width / 2 + 190) - this.anim, (this.height / 2 + 110) - this.anim);
+ if(type == GUIType.CLICK) {
+ /*this.modButtons.add(new ModButton(this.width/ 2 - 139, 165, 323, 35, NightSky.INSTANCE.hudManager.thud));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 205, 323, 35, NightSky.INSTANCE.hudManager.fps));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 245, 323, 35, NightSky.INSTANCE.hudManager.bps));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 285, 323, 35, NightSky.INSTANCE.hudManager.cps));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 325, 323, 35, NightSky.INSTANCE.hudManager.keystrokes));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 365, 323, 35, NightSky.INSTANCE.hudManager.potionStat));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 405, 323, 35, NightSky.INSTANCE.hudManager.sip));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 445, 323, 35, NightSky.INSTANCE.hudManager.xyz));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 485, 323, 35, NightSky.INSTANCE.hudManager.lilplayer));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 525, 323, 35, NightSky.INSTANCE.hudManager.ping));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 565, 323, 35, NightSky.INSTANCE.hudManager.pd));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 605, 323, 35, NightSky.INSTANCE.hudManager.biome));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 645, 323, 35, NightSky.INSTANCE.hudManager.time));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 685, 323, 35, NightSky.INSTANCE.hudManager.Armorstat));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 725, 323, 35, NightSky.INSTANCE.hudManager.hit));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 765, 323, 35, NightSky.INSTANCE.hudManager.mem));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 805, 323, 35, NightSky.INSTANCE.hudManager.timeChanger));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 845, 323, 35, NightSky.INSTANCE.hudManager.ts));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 885, 323, 35, NightSky.INSTANCE.hudManager.direction));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 925, 323, 35, NightSky.INSTANCE.hudManager.reachDisp));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 965, 323, 35, NightSky.INSTANCE.hudManager.particles));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 1005, 323, 35, NightSky.INSTANCE.hudManager.mldg));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 1045, 323, 35, NightSky.INSTANCE.hudManager.head));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 1085, 323, 35, NightSky.INSTANCE.hudManager.bo));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 1125, 323, 35, NightSky.INSTANCE.hudManager.tnt));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 1165, 323, 35, NightSky.INSTANCE.hudManager.iphys));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 1205, 323, 35, NightSky.INSTANCE.hudManager.smallsword));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 1245, 323, 35, NightSky.INSTANCE.hudManager.swordspin));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 1285, 323, 35, NightSky.INSTANCE.hudManager.mp));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 1325, 323, 35, NightSky.INSTANCE.hudManager.sz));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 1365, 323, 35, NightSky.INSTANCE.hudManager.watermark));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 1405, 323, 35, NightSky.INSTANCE.hudManager.arrows));
+ this.modButtons.add(new ModButton(this.width/ 2 - 139, 1445, 323, 35, NightSky.INSTANCE.hudManager.horseStat));*/
+ int countModule = 40;
+ int count = 0;
+ int total = NightSky.INSTANCE.hudManager.hudMods.size() - 5;
+ for(HudMod m : NightSky.INSTANCE.hudManager.hudMods) {
+
+ //System.out.println(NightSky.INSTANCE.hudManager.hudMods.size() - 5);
+
+ if(m.name == "MotionBlur" || m.name == "Color Scheme" || m.name == "Astolfo Buttons" || m.name == "Light theme" || m.name == "Notifications" || m.name == "Freelook" || m.name == "WindowedFullscreen") {
+ //if(!m.name.equals("FPS")) {
+ } else {
+ if(count < total / 2) {
+ this.modButtons.add(new ModButton(this.width/ 2 - 80,this.height / 2 - 115 + countModule, 127, 40, m));
+ } else {
+ this.modButtons.add(new ModButton(this.width/ 2 + 53,this.height / 2 - 115+ countModule - (total / 2 * 45), 127, 40, m)); // - 765
+ }
+ //this.modButtons.add(new ModButton(this.width/ 2 + 53,this.height / 2 - 115 + countModule, 127, 35, m));
+ countModule = countModule + 45;
+ count = count + 1;
+ //System.out.println(count);
+
+ }
+ }
+
+ //this.modButtons.add(new ModButton(this.width/ 2 - 139, 1445, 323, 35, NightSky.INSTANCE.hudManager.lilplayer));
+ //System.out.println("GUIType - Click");
+ } else if(type == GUIType.COSMETIC) {
+ /*this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 165, 323, 35, NightSky.INSTANCE.cosManager.darkCape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 205, 323, 35, NightSky.INSTANCE.cosManager.deamoneyes));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 245, 323, 35, NightSky.INSTANCE.cosManager.deamoneyes2));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 285, 323, 35, NightSky.INSTANCE.cosManager.ecape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 325, 323, 35, NightSky.INSTANCE.cosManager.gblack));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 365, 323, 35, NightSky.INSTANCE.cosManager.gblue));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 405, 323, 35, NightSky.INSTANCE.cosManager.ggreen));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 445, 323, 35, NightSky.INSTANCE.cosManager.gpurple));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 485, 323, 35, NightSky.INSTANCE.cosManager.gred));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 525, 323, 35, NightSky.INSTANCE.cosManager.kcape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 565, 323, 35, NightSky.INSTANCE.cosManager.kcape2));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 605, 323, 35, NightSky.INSTANCE.cosManager.lcape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 645, 323, 35, NightSky.INSTANCE.cosManager.ncape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 685, 323, 35, NightSky.INSTANCE.cosManager.pcape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 725, 323, 35, NightSky.INSTANCE.cosManager.quavcape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 765, 323, 35, NightSky.INSTANCE.cosManager.quickcape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 805, 323, 35, NightSky.INSTANCE.cosManager.rcape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 845, 323, 35, NightSky.INSTANCE.cosManager.scape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 885, 323, 35, NightSky.INSTANCE.cosManager.tcape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 925, 323, 35, NightSky.INSTANCE.cosManager.sofyt));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 965, 323, 35, NightSky.INSTANCE.cosManager.sofyt2));
+
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 1005, 323, 35, NightSky.INSTANCE.cosManager.dwings));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 1045, 323, 35, NightSky.INSTANCE.cosManager.gwings));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 1085, 323, 35, NightSky.INSTANCE.cosManager.cwings));
+
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 1125, 323, 35, NightSky.INSTANCE.cosManager.eggs));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 1165, 323, 35, NightSky.INSTANCE.cosManager.witchhat));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 1205, 323, 35, NightSky.INSTANCE.cosManager.glasses));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 1245, 323, 35, NightSky.INSTANCE.cosManager.halo));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 1285, 323, 35, NightSky.INSTANCE.cosManager.retardeyes));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 1325, 323, 35, NightSky.INSTANCE.cosManager.blaze));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 1365, 323, 35, NightSky.INSTANCE.cosManager.ban));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 1405, 323, 35, NightSky.INSTANCE.cosManager.wpet));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 1445, 323, 35, NightSky.INSTANCE.cosManager.ch));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139, 1485, 323, 35, NightSky.INSTANCE.cosManager.rinn));*/
+ int countCape = 40;
+ for(CosmeticModule m : NightSky.INSTANCE.cosManager.cosmetics) {
+ if(m.name == "Owner Cape" || m.name == "Staff Cape" || m.name == "Creeper Lightning Cosmetic" || m.name == "YT Cape" || !(m.type == CosmeticType.CAPE)) {
+
+ } else {
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139,this.height / 2 - 145 + countCape, 323, 35, m));
+ countCape = countCape + 40;
+ //System.out.println(countModule);
+ }
+ }
+ int countAnim = 40;
+ for(CosmeticModule m : NightSky.INSTANCE.cosManager.cosmetics) {
+ if(m.name == "Owner Cape" || m.name == "Staff Cape" || m.name == "Creeper Lightning Cosmetic" || m.name == "YT Cape" || !(m.type == CosmeticType.ANIM)) {
+
+ } else {
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139,this.height / 2 - 185 + countCape + countAnim, 323, 35, m));
+ countAnim = countAnim + 40;
+ //System.out.println(countModule);
+ }
+ }
+ int countWings = 40;
+ for(CosmeticModule m : NightSky.INSTANCE.cosManager.cosmetics) {
+ if(m.name == "Owner Cape" || m.name == "Staff Cape" || m.name == "Creeper Lightning Cosmetic" || m.name == "YT Cape" || !(m.type == CosmeticType.WINGS)) {
+
+ } else {
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139,this.height / 2 - 225 + countCape + countAnim + countWings, 323, 35, m));
+ countWings = countWings + 40;
+ //System.out.println(countModule);
+ }
+ }
+ int countHat = 40;
+ for(CosmeticModule m : NightSky.INSTANCE.cosManager.cosmetics) {
+ if(m.name == "Owner Cape" || m.name == "Staff Cape" || m.name == "Creeper Lightning Cosmetic" || m.name == "YT Cape" || !(m.type == CosmeticType.HAT)) {
+
+ } else {
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139,this.height / 2 - 265 + countCape + countAnim + countWings + countHat, 323, 35, m));
+ countHat = countHat + 40;
+ //System.out.println(countModule);
+ }
+ }
+ int countPet = 40;
+ for(CosmeticModule m : NightSky.INSTANCE.cosManager.cosmetics) {
+ if(m.name == "Owner Cape" || m.name == "Staff Cape" || m.name == "Creeper Lightning Cosmetic" || m.name == "YT Cape" || !(m.type == CosmeticType.PET)) {
+
+ } else {
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139,this.height / 2 - 305 + countCape + countAnim + countWings + countHat + countPet, 323, 35, m));
+ countPet = countPet + 40;
+ //System.out.println(countModule);
+ }
+ }
+ int countBandana = 40;
+ for(CosmeticModule m : NightSky.INSTANCE.cosManager.cosmetics) {
+ if(m.name == "Owner Cape" || m.name == "Staff Cape" || m.name == "Creeper Lightning Cosmetic" || m.name == "YT Cape" || !(m.type == CosmeticType.BANDANA)) {
+
+ } else {
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139,this.height / 2 - 345 + countCape + countAnim + countWings + countHat + countPet + countBandana, 323, 35, m));
+ countBandana = countBandana + 40;
+ //System.out.println(countModule);
+ }
+ }
+ int countOther = 40;
+ for(CosmeticModule m : NightSky.INSTANCE.cosManager.cosmetics) {
+ if(m.name == "Owner Cape" || m.name == "Staff Cape" || m.name == "Creeper Lightning Cosmetic" || m.name == "YT Cape" || !(m.type == CosmeticType.OTHER)) {
+
+ } else {
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139,this.height / 2 - 385 + countCape + countAnim + countWings + countHat + countPet + countBandana + countOther, 323, 35, m));
+ countOther = countOther + 40;
+ //System.out.println(countModule);
+ }
+ }
+ //System.out.println("GUIType - Cosmetic");
+ } else if(type == GUIType.PROFILE) {
+ try {
+ int countCosmetic = 40;
+ for(CosmeticModule m : NightSky.INSTANCE.cosManager.cosmetics) {
+ if((m.name.equals("Owner Cape") || m.name.equals("Staff Cape") || m.name.equals("YT Cape")) && mc.thePlayer.getName().equals("hypnomacka")) {
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139,this.height / 2 - 145 + countCosmetic, 323, 35, m));
+ countCosmetic = countCosmetic + 40;
+
+ } else if(m.name.equals("YT Cape") && mc.thePlayer.getName().equals("")) {
+ //if()
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139,this.height / 2 - 145 + countCosmetic, 323, 35, m));
+ countCosmetic = countCosmetic + 40;
+ //System.out.println(countModule);
+ }
+ }
+ } catch(NullPointerException e) {
+ e.printStackTrace();
+
+ }
+
+ //System.out.println("GUIType - Profile");
+ } else if(type == GUIType.THEME) {
+ int countModule = 40;
+ for(HudMod m : NightSky.INSTANCE.hudManager.hudMods) {
+ if(m.name == "Light theme" || m.name == "Color Scheme" || m.name == "Astolfo Buttons") {
+ this.modButtons.add(new ModButton(this.width/ 2 - 139,this.height / 2 - 145 + countModule, 323, 35, m));
+ countModule = countModule + 40;
+
+ }
+ }
+
+ } else if(type == GUIType.SETTINGS) {
+ this.buttonList.add(new LArrowBtn(4, this.width / 2 - 186, this.height / 2 - 109, ""));
+ }
+
+ if(!(type == GUIType.SETTINGS)) {
+ this.buttonList.add(new LogoButtonWhite(69, this.width / 2 - 183, this.height / 2 - 105, "NightSky"));
+ this.buttonList.add(new HomeCGButton(1, this.width / 2 - 183, this.height / 2 - 61, "Modules"));
+ this.buttonList.add(new CosmeticsCGButton(3, this.width / 2 - 183, this.height / 2 - 38, "Cosmetics"));
+ this.buttonList.add(new ToggleableCGButton(2, this.width / 2 - 183, this.height / 2 - 15, "Personal"));
+ this.buttonList.add(new SettingsCGButton(4, this.width / 2 - 183, this.height / 2 + 12, "Settings"));
+ this.buttonList.add(new PositioningCGButton(5, this.width / 2 - 183, this.height / 2 + 40, "Positioning"));
+ }
+ this.searchBar = new GuiTextField(24, this.mc.fontRendererObj, 100, 10, 200, 20);
+ this.searchBar.setFocused(true);
+ Keyboard.enableRepeatEvents(true);
+ //this.buttonList.add(new HudButton(6, this.width / 2 - 188, this.height / 2 + 88, ""));
+
+ //GL11.glDisable(3089);
+
+}
+
+ @Override
+ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
+
+ //Gui.drawRect(drag.getxPosition() - 3, drag.getyPosition() - 3, drag.getxPosition() + 423, drag.getyPosition() + 328, -1);
+
+ //System.out.println(NightSky.DisName + NightSky.DisTag + "= Hypnomacka#4765");
+
+ //this.btnHovered = mouseX >= ModButton.x && mouseX <= ModButton.x + ModButton.w && mouseY >= ModButton.y && mouseY <= ModButton.y + ModButton.h;
+
+ //FontUtilCedo.normal.drawString("l", 340, 135, new Color(50, 50, 50, 255).getRGB());
+
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+ GlStateManager.enableAlpha();
+ GlStateManager.enableBlend();
+
+ ScaledResolution sr = new ScaledResolution(mc);
+
+ ClickGUIUtil.renderClickGUI();
+
+ //this.searchBar.drawTextBox();
+
+
+
+
+
+
+ if(type == GUIType.SETTINGS) {
+ //for(HudMod m : NightSky.INSTANCE.hudManager.hudMods) {
+ if(!m.settings.isEmpty()) {
+ for(Setting setting : m.settings) {
+ int countb = 1;
+ if(setting instanceof BooleanSetting) {
+ new BooleanButton(mouseX, mouseY, 75, 75 * countb + 10, (BooleanSetting) setting, m, 1);
+ countb += 1;
+ }
+ }
+ for(Setting setting : m.settings) {
+ int countm = 1;
+ if(setting instanceof ModeSetting) {
+ new ModeButton(mouseX, mouseY, this.width / 2 - 140, this.height / 2 - 80 * countm + 10, (ModeSetting) setting, m, 2);
+ countm += 1;
+ }
+ }
+ }
+ //}
+
+ }
+ /*if(MinecraftServer.getServer().isSinglePlayer()) {
+ NetworkPlayerInfo playerInfo = mc.getNetHandler().getPlayerInfo(mc.thePlayer.getUniqueID());
+ if(playerInfo != null) {
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+ }
+ } else if(Minecraft.getMinecraft().getCurrentServerData() != null) {
+ NetworkPlayerInfo playerInfo = mc.getNetHandler().getPlayerInfo(mc.thePlayer.getUniqueID());
+ if(playerInfo != null) {
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+ }
+ } else {
+
+ }*/
+
+ if(type == GUIType.CLICK || type == GUIType.THEME) {
+ GL11.glDisable(GL11.GL_SCISSOR_TEST);
+ checkMouseWheel(mouseX, mouseY);
+ GL11.glPushMatrix();
+ GL11.glPushAttrib(GL11.GL_SCISSOR_BIT);
+ {
+ RenderUtil.scissor(this.width / 2 - 190, this.height / 2 - 0, this.width / 2 + 190, this.height / 2 + 110);
+ GL11.glEnable(GL11.GL_SCISSOR_TEST);
+ }
+
+ GLUtils.makeScissorBox(this.width / 2 - 190, this.height / 2 - 79, this.width / 2 + 190, this.height / 2 + 110);
+
+
+
+ super.drawScreen(mouseX, mouseY, partialTicks);
+ for(ModButton m : modButtons) {
+ m.draw();
+ }
+ GL11.glDisable(GL11.GL_SCISSOR_TEST);
+ GL11.glPopAttrib();
+ GL11.glPopMatrix();
+ //GL11.glDisable(3089);
+ } else if(type == GUIType.COSMETIC || type == GUIType.PROFILE) {
+ GL11.glDisable(GL11.GL_SCISSOR_TEST);
+ checkMouseWheelCosmetic(mouseX, mouseY);
+ GL11.glPushMatrix();
+ GL11.glPushAttrib(GL11.GL_SCISSOR_BIT);
+ {
+ RenderUtil.scissor(this.width / 2 - 190, this.height / 2 - 0, this.width / 2 + 190, this.height / 2 + 110);
+ //RenderUtil.scissor2(this.width / 2 - 190, this.height / 2 - 110, 1920, 1080);
+ //RenderUtil.scissor(this.width / 2 - 100, -300, 1920, 1080);
+ GL11.glEnable(GL11.GL_SCISSOR_TEST);
+ }
+ if (this.anim > 0.0F)
+ this.anim -= 8.5F;
+ if(this.guiOpen == true) {
+ GLUtils.makeScissorBox(this.width / 2 - 190, this.height / 2 - 110, this.width / 2 + 190, this.height / 2 + 110);
+ } else {
+ GLUtils.makeScissorBox((this.width / 2 - 190) + this.anim, (this.height / 2 - 107) + this.anim, (this.width / 2 + 190) - this.anim, (this.height / 2 + 107) - this.anim);
+ }
+ super.drawScreen(mouseX, mouseY, partialTicks);
+ for(CosmeticButton cos : cosButtons) {
+ try {
+ cos.draw();
+ } catch(NullPointerException e) {
+ e.printStackTrace();
+ System.out.println("Line-512");
+
+ }
+ }
+ GL11.glDisable(GL11.GL_SCISSOR_TEST);
+ GL11.glPopAttrib();
+ GL11.glPopMatrix();
+ GL11.glDisable(3089);
+ } else if(type == GUIType.THEME) {
+ GL11.glDisable(GL11.GL_SCISSOR_TEST);
+ checkMouseWheelCosmetic(mouseX, mouseY);
+ GL11.glPushMatrix();
+ GL11.glPushAttrib(GL11.GL_SCISSOR_BIT);
+ {
+ RenderUtil.scissor(this.width / 2 - 190, this.height / 2 - 110, this.width / 2 + 190, this.height / 2 + 110);
+ //RenderUtil.scissor2(this.width / 2 - 190, this.height / 2 - 110, 1920, 1080);
+ //RenderUtil.scissor(this.width / 2 - 100, -300, 1920, 1080);
+ GL11.glEnable(GL11.GL_SCISSOR_TEST);
+ }
+
+ super.drawScreen(mouseX, mouseY, partialTicks);
+ for(ThemeButton t : tButtons) {
+ t.draw();
+ }
+ GL11.glDisable(GL11.GL_SCISSOR_TEST);
+ GL11.glPopAttrib();
+ GL11.glPopMatrix();
+ }
+ try {
+ if(hud) {
+ this.hovered = (mouseX >= top.getxPosition() + 180 && mouseY >= top.getyPosition() + 2 && mouseX < top.getxPosition() + 180 + 17 && mouseY < top.getyPosition() + 2 + 15);
+
+ //Playerdraw(top.getxPosition(), top.getyPosition() + 100, 10000, 50.0F, 0.0F, (EntityLivingBase)Minecraft.thePlayer);
+ Playerdraw(top.getxPosition() + 42, top.getyPosition() + 100, 25, 0, 0, mc.thePlayer);
+ RoundedUtils.drawSmoothRoundedRect(top.getxPosition(), top.getyPosition(), top.getxPosition() + 200, top.getyPosition() + 110, 18.0f, new Color(25, 25, 30, 255).getRGB());
+ mc.fontRendererObj.drawString(NightSky.mcname, top.getxPosition() + 70, top.getyPosition() + 82, new Color(255, 255, 254, 255).getRGB());
+ mc.fontRendererObj.drawString(NightSky.rank(), top.getxPosition() + 70, top.getyPosition() + 92, new Color(255, 255, 254, 255).getRGB());
+ //mc.fontRendererObj.drawString(NightSky.DisName, top.getxPosition() + 70, top.getyPosition() + 45, new Color(255, 255, 254, 255).getRGB());
+ //mc.fontRendererObj.drawString(NightSky.DisTag, top.getxPosition() + 70, top.getyPosition() + 55, new Color(255, 255, 254, 255).getRGB());
+ if(hovered) {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/quit.png"), top.getxPosition() + 180, top.getyPosition() + 2, 15, 15, new Color(255, 0, 0));
+ //if(Button == 1) {
+
+ //}
+ //mc.displayGuiScreen(new ClickGUI());
+ } else {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/quit.png"), top.getxPosition() + 180, top.getyPosition() + 2, 15, 15, Color.white);
+ }
+
+ //Gui.drawRect(top.getxPosition() - 3, top.getyPosition() - 3, top.getxPosition() + 423, top.getyPosition() + 328, -1);
+ //Gui.drawRect(top.getxPosition(), top.getyPosition() + 5, top.getxPosition() + 420, top.getyPosition() + 325, new Color(33,33,33).getRGB());
+ top.draw(mouseX, mouseY);
+ }
+ } catch (NullPointerException e) {
+ System.out.println("GUI ERROR");
+ }
+ super.drawScreen(mouseX, mouseY, partialTicks);
+ }
+
+ /*@Override
+ protected void keyTyped(char character, int key) {
+ try {
+ super.keyTyped(character, key);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ if (character == '\t') {
+
+ }
+ if (character == '\r') {
+ //this.actionPerformed((GuiButton)this.buttonList.get(0));
+ }
+ //this.searchBar.textboxKeyTyped(character, key);
+
+ }*/
+
+ @Override
+ protected void actionPerformed(GuiButton button) throws IOException {
+ if(button.id == 1) {
+ //NightSky.sendMessage("Opened ClickGUI");
+ type = GUIType.CLICK;
+ //hud = true;
+ mc.displayGuiScreen(new ClickGUI());
+
+ //mc.displayGuiScreen(new ClickGUI());
+
+ }
+ if(button.id == 5) {
+ mc.displayGuiScreen(new HUDConfigScreen());
+ }
+ if(button.id == 3) {
+ setType(GUIType.COSMETIC);
+ mc.displayGuiScreen(new ClickGUI());
+ //type = GUIType.COSMETIC;
+ //mc.displayGuiScreen(new CosmeticGUINew());
+ }
+ if(button.id == 2) {
+ setType(GUIType.PROFILE);
+ mc.displayGuiScreen(new ClickGUI());
+ //type = GUIType.PROFILE;
+ //mc.displayGuiScreen(new ClickGUI2());
+ }
+ if(button.id == 4) {
+ setType(GUIType.THEME);
+ mc.displayGuiScreen(new ClickGUI());
+ //mc.displayGuiScreen(new GuiMultiplayerIngame());
+ }
+ if(button.id == 99) {
+ try {
+ Desktop desktop = java.awt.Desktop.getDesktop();
+ URI oURL = new URI("http://hynomacka.ddns.net");
+ desktop.browse(oURL);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ if(button.id == 6) {
+ //mc.displayGuiScreen(new Changelog());
+ hud = true;
+ }
+ if(button.id == 8) {
+ type = GUIType.COSMETIC;
+ mc.displayGuiScreen(new ClickGUI());
+ //mc.displayGuiScreen(new CosmeticGUINew());
+ }
+ if(button.id == 9) {
+ mc.displayGuiScreen(new ClickGUI());
+ }
+ if(button.id == 0) {
+ type = GUIType.PROFILE;
+ mc.displayGuiScreen(new ClickGUI());
+ //mc.displayGuiScreen(new ProfileCGui(null));
+ }
+ }
+
+//}
+ public static void setType(GUIType killme) {
+ if(killme == GUIType.CLICK) {
+ type = GUIType.CLICK;
+ //this.m = null;
+ } else if(killme == GUIType.COSMETIC) {
+ type = GUIType.COSMETIC;
+ //this.m = null;
+ } else if(killme == GUIType.PROFILE) {
+ type = GUIType.PROFILE ;
+ //this.m = null;
+ }else if(killme == GUIType.THEME) {
+ type = GUIType.THEME ;
+ }
+ }
+ public static void setTheme(GUITheme killme) {
+ if(killme == GUITheme.DARK) {
+ theme = GUITheme.DARK;
+ //this.m = null;
+ } else if(killme == GUITheme.LIGHT) {
+ theme = GUITheme.LIGHT;
+ //this.m = null;
+ }
+ }
+
+ //public ParticleEngine engine = new ParticleEngine();
+
+
+
+ public static void ownerCheck() {
+ if(NightSky.DisName + NightSky.DisTag == "Hypnomacka#4765") {
+ Booleans.isOwner = true;
+ } else {
+ Booleans.isOwner = false;
+ }
+ }
+
+
+
+
+ @Override
+ public void draw() {
+
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+
+ Playerdraw(15 + 15, 15 + 50, 25, 50, 0, null);
+
+ super.draw();
+ }
+
+
+ @Override
+ protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException {
+ super.mouseClicked(mouseX, mouseY, mouseButton);
+ for(ModButton m : modButtons) {
+ m.onClick(mouseX, mouseY, mouseButton);
+ }
+ for(CosmeticButton cos : cosButtons) {
+ cos.onClick(mouseX, mouseY, mouseButton);
+ }
+ for(SettingButton s : settingButtons) {
+ s.onClick(mouseX, mouseY, mouseButton);
+ }
+ if(hovered) {
+ if(mouseButton == 0) {
+ //mc.displayGuiScreen(new ClickGUI());
+ hud = false;
+ }
+ }
+ if(type == GUIType.SETTINGS) {
+ for(HudMod mod : NightSky.INSTANCE.hudManager.hudMods) {
+ if(!mod.settings.isEmpty()) {
+ for(Setting setting : mod.settings) {
+ if(setting instanceof BooleanSetting) {
+ if(BooleanButton.isHovered(mouseX, mouseY)) {
+ ((BooleanSetting) setting).toggle();
+ }
+ }
+ }
+ }
+ }
+ for(HudMod mod : NightSky.INSTANCE.hudManager.hudMods) {
+ if(!mod.settings.isEmpty()) {
+ for(Setting setting : mod.settings) {
+ if(setting instanceof ModeSetting) {
+ if(ModeButton.isHovered(mouseX, mouseY)) {
+ ((ModeSetting) setting).cycle();
+ }
+ }
+ }
+ }
+ }
+ }
+ super.mouseClicked(mouseX, mouseY, mouseButton);
+ }
+
+ private void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 270, 360, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 180, 270, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 180, color);
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+ public static void Playerdraw(int posX, int posY, int scale, float mouseX, float mouseY, EntityLivingBase ent)
+ {
+ try {
+ GlStateManager.enableColorMaterial();
+ GlStateManager.pushMatrix();
+ GlStateManager.translate((float)posX, (float)posY, 50.0F);
+ GlStateManager.scale((float)(-40), (float)42, (float)42);
+ GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F);
+ float f = ent.renderYawOffset;
+ float f1 = ent.rotationYaw;
+ float f2 = ent.rotationPitch;
+ float f3 = ent.prevRotationYawHead;
+ float f4 = ent.rotationYawHead;
+ GlStateManager.rotate(180f, 0.0F, 1.0F, 0.0F);
+ RenderHelper.enableStandardItemLighting();
+ GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(-((float)Math.atan((double)(mouseY / 40.0F))) * 20.0F, 1.0F, 0.0F, 0.0F);
+ ent.renderYawOffset = (float)Math.atan((double)(mouseX / 40.0F)) * 20.0F;
+ ent.rotationYaw = (float)Math.atan((double)(mouseX / 40.0F)) * 40.0F;
+ ent.rotationPitch = -((float)Math.atan((double)(mouseY / 40.0F))) * 20.0F;
+ ent.rotationYawHead = ent.rotationYaw;
+ ent.prevRotationYawHead = ent.rotationYaw;
+ GlStateManager.translate(0.0F, 0.0F, 0.0F);
+ RenderManager rendermanager = Minecraft.getMinecraft().getRenderManager();
+ rendermanager.setPlayerViewY(180.0F);
+ rendermanager.setRenderShadow(false);
+ rendermanager.renderEntityWithPosYaw(ent, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F);
+ rendermanager.setRenderShadow(true);
+ ent.renderYawOffset = f;
+ ent.rotationYaw = f1;
+ ent.rotationPitch = f2;
+ ent.prevRotationYawHead = f3;
+ ent.rotationYawHead = f4;
+ GlStateManager.popMatrix();
+ RenderHelper.disableStandardItemLighting();
+ GlStateManager.disableRescaleNormal();
+ GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit);
+ GlStateManager.disableTexture2D();
+ GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
+ } catch (NullPointerException e) {
+ System.out.println("Playerdraw ERROR");
+ }
+
+ }
+ @Override
+ public boolean doesGuiPauseGame() {
+ return false;
+ }
+
+ @Override
+ public void onGuiClosed() {
+ if(type == GUIType.SETTINGS && ModButton.settings) {
+ //type = GUIType.CLICK;
+ ModButton.settings = false;
+ }
+
+ this.guiOpen = false;
+ super.onGuiClosed();
+ mc.entityRenderer.stopUseShader();
+ }
+
+
+}
diff --git a/src/minecraft/animeware/gui/clickgui/GUITheme.java b/src/minecraft/animeware/gui/clickgui/GUITheme.java
new file mode 100644
index 0000000..280e07b
--- /dev/null
+++ b/src/minecraft/animeware/gui/clickgui/GUITheme.java
@@ -0,0 +1,8 @@
+package animeware.gui.clickgui;
+
+public enum GUITheme {
+
+ LIGHT,
+ DARK;
+
+}
diff --git a/src/minecraft/animeware/gui/clickgui/GUIType.java b/src/minecraft/animeware/gui/clickgui/GUIType.java
new file mode 100644
index 0000000..6d3f123
--- /dev/null
+++ b/src/minecraft/animeware/gui/clickgui/GUIType.java
@@ -0,0 +1,12 @@
+package animeware.gui.clickgui;
+
+public enum GUIType {
+
+ THEME,
+ SETTINGS,
+ CLICK,
+ COSMETIC,
+ PROFILE,
+ CGSETTINGS;
+
+}
diff --git a/src/minecraft/animeware/gui/clickgui/SettingsGUI.java b/src/minecraft/animeware/gui/clickgui/SettingsGUI.java
new file mode 100644
index 0000000..4afcd53
--- /dev/null
+++ b/src/minecraft/animeware/gui/clickgui/SettingsGUI.java
@@ -0,0 +1,137 @@
+package animeware.gui.clickgui;
+
+import java.awt.Color;
+import java.awt.Desktop;
+import java.io.IOException;
+import java.net.URI;
+import java.util.ArrayList;
+
+import animeware.NightSky;
+import animeware.gui.mainmenu.MainMenu;
+import animeware.hud.HUDConfigScreen;
+import animeware.hud.mod.HudMod;
+import animeware.ui.comp.HomeCGButton;
+import animeware.ui.comp.LArrowBtn;
+import animeware.ui.comp.LogoButtonWhite;
+import animeware.ui.comp.clickgui.ModButton;
+import animeware.ui.comp.clickgui.SettingFrame;
+import animeware.util.render.RoundedUtils;
+import animeware.util.render.ui.ClickGUIUtil;
+import animeware.util.settings.BooleanSetting;
+import animeware.util.settings.ModeSetting;
+import animeware.util.settings.Setting;
+import animeware.util.settings.comp.BooleanButton;
+import animeware.util.settings.comp.ModeButton;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.util.ResourceLocation;
+
+public class SettingsGUI extends GuiScreen {
+
+ HudMod mod;
+
+ private Minecraft mc = Minecraft.getMinecraft();
+ FontRenderer font = mc.fontRendererObj;
+ ModButton modButton = new ModButton();
+ ArrayList modbuttons = new ArrayList();
+ ScaledResolution sr = new ScaledResolution(mc);
+
+ ArrayList frames;
+ ArrayList bools;
+
+ @Override
+ public boolean doesGuiPauseGame() {
+ return false;
+ }
+
+ public SettingsGUI(HudMod mod) {
+ this.mod = mod;
+
+ /*frames = new ArrayList<>();
+ int offset = 0;
+ for(Category category : Category.values()) {
+ frames.add(new SettingFrame(mod, 285, 100));
+ offset += 150;
+ }*/
+ }
+ @Override
+ public void initGui() {
+ //mc.entityRenderer.loadShader(new ResourceLocation("Animeware/blur.json"));
+ //this.buttonList.add(new LogoButtonWhite(69, this.width / 2 - 186, this.height / 2 - 109, ""));
+ this.buttonList.add(new LArrowBtn(1, this.width / 2 - 186, this.height / 2 - 109, ""));
+ //this.buttonList.add(new LogoButtonWhite(0, this.width / 2 - 186, this.height / 2 - 109, ""));
+ //super.initGui();
+ }
+ @Override
+ protected void actionPerformed(GuiButton button) throws IOException {
+ if(button.id == 1) {
+ mc.displayGuiScreen(new MainMenu());
+
+ }
+
+ }
+
+ @Override
+ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
+ ClickGUIUtil.renderClickGUI();
+ super.drawScreen(mouseX, mouseY, partialTicks);
+
+ if(!mod.settings.isEmpty()) {
+ for(Setting setting : mod.settings) {
+ int countb = 1;
+ if(setting instanceof BooleanSetting) {
+ new BooleanButton(mouseX, mouseY, 75, 75 * countb + 10, (BooleanSetting) setting, mod, 1);
+ countb += 1;
+ }
+ }
+ for(Setting setting : mod.settings) {
+ int countm = 1;
+ if(setting instanceof ModeSetting) {
+ new ModeButton(mouseX, mouseY, this.width / 2 - 140, this.height / 2 - 80 * countm + 10, (ModeSetting) setting, mod, 2);
+ countm += 1;
+ }
+ }
+ }
+ //this.buttonList.add(new LogoButtonWhite(0, this.width / 2 - 186, this.height / 2 - 109, ""));
+
+ //if(mod.settings.isEmpty()) {
+ //font.drawString("This mod has no settings!", 420, 250, -1);
+ //}
+ }
+
+
+ @Override
+ public void mouseClicked(int x, int y, int button) {
+ for(HudMod mod : NightSky.INSTANCE.hudManager.hudMods) {
+ if(!mod.settings.isEmpty()) {
+ for(Setting setting : mod.settings) {
+ if(setting instanceof BooleanSetting) {
+ if(BooleanButton.isHovered(x, y)) {
+ ((BooleanSetting) setting).toggle();
+ }
+ }
+ }
+ }
+ }
+ for(HudMod mod : NightSky.INSTANCE.hudManager.hudMods) {
+ if(!mod.settings.isEmpty()) {
+ for(Setting setting : mod.settings) {
+ if(setting instanceof ModeSetting) {
+ if(ModeButton.isHovered(x, y)) {
+ ((ModeSetting) setting).cycle();
+ }
+ }
+ }
+ }
+ }
+ }
+ @Override
+ public void onGuiClosed() {
+ //this.guiOpen = false;
+ super.onGuiClosed();
+ mc.entityRenderer.stopUseShader();
+ }
+}
diff --git a/src/minecraft/animeware/gui/mainmenu/AltButton.java b/src/minecraft/animeware/gui/mainmenu/AltButton.java
new file mode 100644
index 0000000..92bc71f
--- /dev/null
+++ b/src/minecraft/animeware/gui/mainmenu/AltButton.java
@@ -0,0 +1,176 @@
+//
+// Decompiled by Procyon v0.5.36
+//
+
+package animeware.gui.mainmenu;
+
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.client.renderer.Tessellator;
+import org.lwjgl.opengl.GL11;
+
+import animeware.NightSky;
+import animeware.util.font.FontUtil;
+import animeware.util.render.RoundedUtils;
+
+import java.io.File;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.client.renderer.GlStateManager;
+import java.awt.Color;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiButton;
+
+public class AltButton extends GuiButton
+{
+ private int j6;
+ private int j10;
+ int fade;
+ int fade2;
+
+ //public static int name;
+
+ static int widthint = 0;
+
+ float anim = 0.0F;
+
+ public static int name() {
+ try {
+ return Minecraft.getMinecraft().fontRendererObj.getStringWidth(NightSky.mcname);
+ }catch(NullPointerException e) {
+ e.printStackTrace();
+ return 0;
+ }
+ }
+
+ public AltButton(final int i, final int j, final int k, final String s) {
+ this(i, j, k, 21 + name(), 21, s);
+ }
+
+ public AltButton(final int i, final int j, final int k, final int l, final int i1, final String s) {
+ super(i, j, k, l, i1, s);
+ this.enabled = true;
+ this.visible = true;
+ }
+
+ @Override
+ protected int getHoverState(final boolean flag) {
+ byte byte0 = 1;
+ if (!this.enabled) {
+ byte0 = 0;
+ }
+ else if (flag) {
+ byte0 = 2;
+ }
+ return byte0;
+ }
+
+ @Override
+ public void drawButton(final Minecraft mc, final int mouseX, final int mouseY) {
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ int j = -1;
+ if (this.hovered) {
+ this.name();
+ j = new Color(0,210,220,0).getRGB();
+ }
+ if (!this.hovered) {
+ this.fade = 230;
+ }
+ else {
+ if (this.fade <= 50) {
+ return;
+ }
+ if (this.fade != 160) {
+ this.fade -= 10;
+ }
+ }
+ if (!this.hovered) {
+ this.fade2 = 200;
+ }
+ else {
+ if (this.fade2 <= 30) {
+ return;
+ }
+ if (this.fade2 != 200) {
+ this.fade2 += 10;
+ }
+ }
+ final float b = (float)(this.hovered ? new Color(0, 0, 255, 255).getRGB() : new Color(0, 0, 255, 255).getRGB());
+ final Color a = new Color(0, 0, 5, 100);
+ final Color a2 = new Color(100, 0, 0, this.fade2);
+ final Color a3 = new Color(80, 0, 0, this.fade);
+ if (this.xPosition >= this.xPosition && this.yPosition >= this.yPosition && this.xPosition < this.xPosition + this.width && this.yPosition < this.yPosition + this.height) {
+ final int n = 5;
+ final FontRenderer fr = mc.fontRendererObj;
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ //this.drawRoundedRect(this.xPosition - 1, this.yPosition - 1, this.width + 2, this.height + 2, 3, a2);
+ //this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a3);
+ if (this.anim > 0.0F)
+ this.anim -= 8.5F;
+ if(!hovered) {
+ this.drawRoundedRect(this.xPosition, this.yPosition, this.xPosition + 15, this.yPosition + 15, 3, a);
+ RoundedUtils.drawRoundedOutline(this.xPosition, this.yPosition, this.xPosition + 21, this.yPosition + 21, 8.0F, 2, new Color(0, 0, 0, 255).getRGB());
+ } else {
+ this.drawRoundedRect(this.xPosition, this.yPosition, this.xPosition + 22 + name(), this.height, 3, a);
+ RoundedUtils.drawRoundedOutline(this.xPosition, this.yPosition, this.xPosition + 28 + name(), this.yPosition + 21, 8.0F, 2, new Color(0, 0, 0, 255).getRGB());
+
+ }
+ if(hovered) {
+ //System.out.println(name());
+ FontUtil.normal.drawString(mc.getSession().getUsername(), this.xPosition + 20, this.yPosition + (this.height - 5) / 2, j);
+ } else
+ FontUtil.normal.drawString(this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 5) / 2, j);
+ if(hovered) {
+ GlStateManager.color(0.0f, 0.8f, 0.9f);
+ }else {
+ GlStateManager.color(1.0f, 1.0f, 1.0f);
+ }
+ //Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/icons/logo.png"));
+ //Gui.drawModalRectWithCustomSizedTexture(this.xPosition + 3, this.yPosition + 3, 0.0f, 0.0f, 15, 15, 15.0f, 15.0f);
+ Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/icons/account.png"));
+ Gui.drawModalRectWithCustomSizedTexture(this.xPosition + 3, this.yPosition + 3, 0.0f, 0.0f, 15, 15, 15.0f, 15.0f);
+
+ }
+ }
+
+
+ private void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 270, 360, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 180, 270, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 180, color);
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+ private void Extension() {
+ if(hovered == true) {
+ this.widthint = 40;
+ } else
+ this.widthint = 21;
+ }
+}
diff --git a/src/minecraft/animeware/gui/mainmenu/ClassicButton.java b/src/minecraft/animeware/gui/mainmenu/ClassicButton.java
new file mode 100644
index 0000000..2f81a74
--- /dev/null
+++ b/src/minecraft/animeware/gui/mainmenu/ClassicButton.java
@@ -0,0 +1,136 @@
+//
+// Decompiled by Procyon v0.5.36
+//
+
+package animeware.gui.mainmenu;
+
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.client.renderer.Tessellator;
+import org.lwjgl.opengl.GL11;
+
+import animeware.util.font.FontUtil;
+import animeware.util.render.RoundedUtils;
+
+import java.io.File;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.client.renderer.GlStateManager;
+import java.awt.Color;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiButton;
+
+public class ClassicButton extends GuiButton
+{
+ private int j6;
+ private int j10;
+ int fade;
+ int fade2;
+
+
+ public ClassicButton(final int i, final int j, final int k, final String s) {
+ this(i, j, k, 200, 21, s);
+
+ }
+
+ public ClassicButton(final int i, final int j, final int k, final int l, final int i1, final String s) {
+ super(i, j, k, l, i1, s);
+ this.enabled = true;
+ this.visible = true;
+ }
+
+ @Override
+ protected int getHoverState(final boolean flag) {
+ byte byte0 = 1;
+ if (!this.enabled) {
+ byte0 = 0;
+ }
+ else if (flag) {
+ byte0 = 2;
+ }
+ return byte0;
+ }
+
+ @Override
+ public void drawButton(final Minecraft mc, final int mouseX, final int mouseY) {
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ int j = -1;
+ if (this.hovered) {
+ j = new Color(0,210,220,0).getRGB();
+ }
+ if (!this.hovered) {
+ this.fade = 230;
+ }
+ else {
+ if (this.fade <= 50) {
+ return;
+ }
+ if (this.fade != 160) {
+ this.fade -= 10;
+ }
+ }
+ if (!this.hovered) {
+ this.fade2 = 200;
+ }
+ else {
+ if (this.fade2 <= 30) {
+ return;
+ }
+ if (this.fade2 != 200) {
+ this.fade2 += 10;
+ }
+ }
+ final float b = (float)(this.hovered ? new Color(0, 0, 255, 255).getRGB() : new Color(0, 0, 255, 255).getRGB());
+ final Color a = new Color(0, 0, 5, 70);
+ final Color a2 = new Color(100, 0, 0, this.fade2);
+ final Color a3 = new Color(80, 0, 0, this.fade);
+ if (this.xPosition >= this.xPosition && this.yPosition >= this.yPosition && this.xPosition < this.xPosition + this.width && this.yPosition < this.yPosition + this.height) {
+ final int n = 5;
+ final FontRenderer fr = mc.fontRendererObj;
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ //this.drawRoundedRect(this.xPosition - 1, this.yPosition - 1, this.width + 2, this.height + 2, 3, a2);
+ //this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a3);
+
+ this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a);
+ //RoundedUtils.drawRoundedOutline(this.xPosition, this.yPosition, this.xPosition + 200, this.yPosition + 20, 8.0F, 2, new Color(0, 0, 0, 255).getRGB()); //this.width / 2 - 94, this.height / 2 + 5, this.width / 2 + 116, this.height / 2 + 85, 18.0F, 2, new Color(0, 140, 170, 255).getRGB()
+ GlStateManager.color(1.0f, 0.0f, 0.0f);
+ //Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/icons/logo.png"));
+ //Gui.drawModalRectWithCustomSizedTexture(this.xPosition + 3, this.yPosition + 3, 0.0f, 0.0f, 15, 15, 15.0f, 15.0f);
+ FontUtil.normal.drawCenteredString(this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 5) / 2, j);
+ }
+ }
+
+ public void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 270, 360, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 180, 270, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 180, color);
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+}
diff --git a/src/minecraft/animeware/gui/mainmenu/CosmeticButtonMM.java b/src/minecraft/animeware/gui/mainmenu/CosmeticButtonMM.java
new file mode 100644
index 0000000..7c95aad
--- /dev/null
+++ b/src/minecraft/animeware/gui/mainmenu/CosmeticButtonMM.java
@@ -0,0 +1,134 @@
+//
+// Decompiled by Procyon v0.5.36
+//
+
+package animeware.gui.mainmenu;
+
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.client.renderer.Tessellator;
+import org.lwjgl.opengl.GL11;
+
+import animeware.util.font.FontUtil;
+import animeware.util.render.RoundedUtils;
+
+import java.io.File;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.client.renderer.GlStateManager;
+import java.awt.Color;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiButton;
+
+public class CosmeticButtonMM extends GuiButton
+{
+ private int j6;
+ private int j10;
+ int fade;
+ int fade2;
+
+
+ public CosmeticButtonMM(final int i, final int j, final int k, final String s) {
+ this(i, j, k, 21, 21, s);
+
+ }
+
+ public CosmeticButtonMM(final int i, final int j, final int k, final int l, final int i1, final String s) {
+ super(i, j, k, l, i1, s);
+ this.enabled = true;
+ this.visible = true;
+ }
+
+ @Override
+ protected int getHoverState(final boolean flag) {
+ byte byte0 = 1;
+ if (!this.enabled) {
+ byte0 = 0;
+ }
+ else if (flag) {
+ byte0 = 2;
+ }
+ return byte0;
+ }
+
+ @Override
+ public void drawButton(final Minecraft mc, final int mouseX, final int mouseY) {
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ int j = -1;
+ if (this.hovered) {
+ j = new Color(0,210,220,0).getRGB();
+ }
+
+ final float b = (float)(this.hovered ? new Color(0, 0, 255, 255).getRGB() : new Color(0, 0, 255, 255).getRGB());
+ final Color c = new Color(0, 0, 5, 70);
+ final Color a2 = new Color(100, 0, 0, this.fade2);
+ final Color a3 = new Color(80, 0, 0, this.fade);
+ float f = this.hovered ? new Color(153, 9, 193).getRGB() : new Color(255,255,255,255).getRGB();
+ Color a = new Color(0,0,0, this.fade);
+ if (this.xPosition >= this.xPosition && this.yPosition >= this.yPosition && this.xPosition < this.xPosition + this.width && this.yPosition < this.yPosition + this.height) {
+ final int n = 5;
+ final FontRenderer fr = mc.fontRendererObj;
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ if(!hovered) {
+ this.fade = 90;
+ }
+ else {
+ if(this.fade <= 30) {
+ return;
+ }
+ if(this.fade != 130) {
+ this.fade += 5;
+ }
+ }
+ //this.drawRoundedRect(this.xPosition - 1, this.yPosition - 1, this.width + 2, this.height + 2, 3, a2);
+ //this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a3);
+ this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a);
+ RoundedUtils.drawRoundedOutline(this.xPosition, this.yPosition, this.xPosition + 21, this.yPosition + 21, 8.0F, 2, new Color(0, 0, 0, 255).getRGB()); //this.width / 2 - 94, this.height / 2 + 5, this.width / 2 + 116, this.height / 2 + 85, 18.0F, 2, new Color(0, 140, 170, 255).getRGB()
+ if(hovered) {
+ GlStateManager.color(0.0f, 0.8f, 0.9f);
+ }else {
+ GlStateManager.color(1.0f, 1.0f, 1.0f);
+ }
+ //Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/icons/logo.png"));
+ //Gui.drawModalRectWithCustomSizedTexture(this.xPosition + 3, this.yPosition + 3, 0.0f, 0.0f, 15, 15, 15.0f, 15.0f);
+ Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/icons/cosmetics.png"));
+ Gui.drawModalRectWithCustomSizedTexture(this.xPosition + 3, this.yPosition + 3, 0.0f, 0.0f, 15, 15, 15.0f, 15.0f);
+
+ FontUtil.normal.drawCenteredString(this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 5) / 2, j);
+ }
+ }
+
+ private void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 270, 360, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 180, 270, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 180, color);
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+}
diff --git a/src/minecraft/animeware/gui/mainmenu/CosmeticButtonNoOutl.java b/src/minecraft/animeware/gui/mainmenu/CosmeticButtonNoOutl.java
new file mode 100644
index 0000000..a5e54e5
--- /dev/null
+++ b/src/minecraft/animeware/gui/mainmenu/CosmeticButtonNoOutl.java
@@ -0,0 +1,130 @@
+package animeware.gui.mainmenu;
+
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.client.renderer.Tessellator;
+import org.lwjgl.opengl.GL11;
+
+import animeware.util.font.FontUtil;
+import animeware.util.render.RoundedUtils;
+
+import java.io.File;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.client.renderer.GlStateManager;
+import java.awt.Color;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiButton;
+
+public class CosmeticButtonNoOutl extends GuiButton
+{
+ private int j6;
+ private int j10;
+ int fade;
+ int fade2;
+
+
+ public CosmeticButtonNoOutl(final int i, final int j, final int k, final String s) {
+ this(i, j, k, 21, 21, s);
+
+ }
+
+ public CosmeticButtonNoOutl(final int i, final int j, final int k, final int l, final int i1, final String s) {
+ super(i, j, k, l, i1, s);
+ this.enabled = true;
+ this.visible = true;
+ }
+
+ @Override
+ protected int getHoverState(final boolean flag) {
+ byte byte0 = 1;
+ if (!this.enabled) {
+ byte0 = 0;
+ }
+ else if (flag) {
+ byte0 = 2;
+ }
+ return byte0;
+ }
+
+ @Override
+ public void drawButton(final Minecraft mc, final int mouseX, final int mouseY) {
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ int j = -1;
+ if (this.hovered) {
+ j = new Color(0,210,220,0).getRGB();
+ }
+
+ final float b = (float)(this.hovered ? new Color(0, 0, 255, 255).getRGB() : new Color(0, 0, 255, 255).getRGB());
+ final Color c = new Color(0, 0, 5, 70);
+ final Color a2 = new Color(100, 0, 0, this.fade2);
+ final Color a3 = new Color(80, 0, 0, this.fade);
+ float f = this.hovered ? new Color(153, 9, 193).getRGB() : new Color(255,255,255,255).getRGB();
+ Color a = new Color(0,0,0, this.fade);
+ if (this.xPosition >= this.xPosition && this.yPosition >= this.yPosition && this.xPosition < this.xPosition + this.width && this.yPosition < this.yPosition + this.height) {
+ final int n = 5;
+ final FontRenderer fr = mc.fontRendererObj;
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ if(!hovered) {
+ this.fade = 90;
+ }
+ else {
+ if(this.fade <= 30) {
+ return;
+ }
+ if(this.fade != 130) {
+ this.fade += 5;
+ }
+ }
+ //this.drawRoundedRect(this.xPosition - 1, this.yPosition - 1, this.width + 2, this.height + 2, 3, a2);
+ //this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a3);
+ this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a);
+ //RoundedUtils.drawRoundedOutline(this.xPosition, this.yPosition, this.xPosition + 21, this.yPosition + 21, 8.0F, 2, new Color(0, 0, 0, 255).getRGB()); //this.width / 2 - 94, this.height / 2 + 5, this.width / 2 + 116, this.height / 2 + 85, 18.0F, 2, new Color(0, 140, 170, 255).getRGB()
+ if(hovered) {
+ GlStateManager.color(0.0f, 0.8f, 0.9f);
+ }else {
+ GlStateManager.color(1.0f, 1.0f, 1.0f);
+ }
+ //Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/icons/logo.png"));
+ //Gui.drawModalRectWithCustomSizedTexture(this.xPosition + 3, this.yPosition + 3, 0.0f, 0.0f, 15, 15, 15.0f, 15.0f);
+ Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/icons/cosmetics.png"));
+ Gui.drawModalRectWithCustomSizedTexture(this.xPosition + 3, this.yPosition + 3, 0.0f, 0.0f, 15, 15, 15.0f, 15.0f);
+
+ FontUtil.normal.drawCenteredString(this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 5) / 2, j);
+ }
+ }
+
+ private void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 270, 360, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 180, 270, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 180, color);
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+}
diff --git a/src/minecraft/animeware/gui/mainmenu/MMMode.java b/src/minecraft/animeware/gui/mainmenu/MMMode.java
new file mode 100644
index 0000000..bd8beed
--- /dev/null
+++ b/src/minecraft/animeware/gui/mainmenu/MMMode.java
@@ -0,0 +1,8 @@
+package animeware.gui.mainmenu;
+
+public enum MMMode {
+
+ DEFAULT,
+ COSMETIC;
+
+}
diff --git a/src/minecraft/animeware/gui/mainmenu/MainMenu.java b/src/minecraft/animeware/gui/mainmenu/MainMenu.java
new file mode 100644
index 0000000..fb49f3e
--- /dev/null
+++ b/src/minecraft/animeware/gui/mainmenu/MainMenu.java
@@ -0,0 +1,520 @@
+package animeware.gui.mainmenu;
+
+import java.awt.Color;
+import java.awt.Desktop;
+import java.io.IOException;
+import java.net.URI;
+import java.util.ArrayList;
+
+import org.lwjgl.input.Mouse;
+import org.lwjgl.opengl.GL11;
+import org.lwjgl.util.glu.Project;
+
+import animeware.NightSky;
+import animeware.cosmetic.Booleans;
+import animeware.cosmetic.CosmeticModule;
+import animeware.gui.clickgui.ClickGUI;
+import animeware.ui.comp.CosmeticButton;
+import animeware.ui.comp.MainMenuBtn;
+import animeware.ui.comp.clickgui.ModButton;
+import animeware.ui.login.LoginScreen;
+import animeware.util.ClientPanorama;
+import animeware.util.animations.Animation;
+import animeware.util.font.FontUtil;
+import animeware.util.font.JCFont.Fonts;
+import animeware.util.font.JCFont.cFontRenderer;
+import animeware.util.render.AnimatedResourceLocation;
+import animeware.util.render.ColorUtil;
+import animeware.util.render.DrawUtil;
+import animeware.util.render.RenderUtil;
+import animeware.util.render.ui.ClickGUIUtil;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiMultiplayer;
+import net.minecraft.client.gui.GuiOptions;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.GuiSelectWorld;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.network.NetworkPlayerInfo;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.texture.DynamicTexture;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.client.resources.I18n;
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+
+public class MainMenu extends GuiScreen {
+
+ public cFontRenderer regular = Fonts.getCustomeFont(20, "regular");
+
+ public cFontRenderer light = Fonts.getCustomeFont(20, "light");
+
+ public cFontRenderer bold = Fonts.getCustomeFont(20, "bold");
+
+ public cFontRenderer bold_ = Fonts.getCustomeFont(20, "bold+");
+
+ public cFontRenderer regularS = Fonts.getCustomeFont(14, "regular");
+
+ public cFontRenderer lightS = Fonts.getCustomeFont(14, "light");
+
+ public cFontRenderer boldS = Fonts.getCustomeFont(14, "bold");
+
+ public cFontRenderer bold_S = Fonts.getCustomeFont(14, "bold+");
+
+ private final Object threadLock = new Object();
+
+ boolean hovered;
+ private String splashText;
+ private String openGLWarning1;
+ private String openGLWarning2;
+ private DynamicTexture viewportTexture;
+ private Animation openAnimation;
+ ArrayList cosButtons = new ArrayList<>();
+ //private static final ResourceLocation minecraftTitleTextures = new ResourceLocation("textures/gui/title/minecraft.png");
+ private float updateCounter;
+ private int field_92024_r;
+ private int field_92023_s;
+ private int field_92022_t;
+ private int field_92021_u;
+ private int field_92020_v;
+ private int field_92019_w;
+ private ResourceLocation backgroundTexture;
+ private int panoramaTimer;
+
+ private AnimatedResourceLocation gif;
+
+ private int bgid = 0;
+ public static MMMode mode = MMMode.DEFAULT;
+
+ @Override
+ public void updateScreen()
+ {
+ ++this.panoramaTimer;
+ }
+
+ public static void setMode(MMMode killme2) {
+ if(killme2 == MMMode.DEFAULT) {
+ mode = MMMode.DEFAULT;
+ //this.m = null;
+ } else if(killme2 == MMMode.COSMETIC) {
+ mode = MMMode.COSMETIC;
+ //this.m = null;
+ }
+ }
+
+ @Override
+ public void initGui() {
+ //setMode(MMMode.DEFAULT);
+
+ //openAnimation = new ElasticAnimation(750, 1, 30.8f, 4.75f, false);
+ ScaledResolution sr = new ScaledResolution(mc);
+ NightSky.INSTANCE.getDiscordRP().update("Main Menu", "Version: " + NightSky.INSTANCE.VERSION);
+ if(!Booleans.ban) {
+ gif = new AnimatedResourceLocation("Animeware/cosmetic/capes/anim/lightning", 10, 5);
+ NightSky.INSTANCE.getDiscordRP().update("Main Menu", "Version: " + NightSky.INSTANCE.VERSION);
+ int i = 24;
+ int j = this.height / 4 + 48;
+ //this.buttonList.add(new ClassicButton(1, 370, height / 2 + 25, "Singleplayer"));
+ //this.buttonList.add(new GuiButton(0, this.width / 2 - 100, 72 + 1, 98, 30, ("options")));
+ //this.buttonList.add(new ClassicButton(2, 370, height / 2 + 51, "Multiplayer"));
+
+ if(mode == MMMode.COSMETIC) {
+ this.buttonList.add(new QuitButton(11, sr.getScaledWidth() - 135, 70, ""));
+ }
+ int countCosmetic = 40;
+ for(CosmeticModule m : NightSky.INSTANCE.cosManager.cosmetics) {
+ if(m.name == "Owner Cape" || m.name == "Staff Cape" || m.name == "Creeper Lightning Cosmetic" || m.name == "YT Cape") {
+
+ } else if(mode == MMMode.COSMETIC){
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139,this.height / 2 - 145 + countCosmetic, 323, 35, m));
+ countCosmetic = countCosmetic + 40;
+ //System.out.println(countModule);
+ }
+ }
+ this.buttonList.add(new QuitButton(4, sr.getScaledWidth() - 27, 6, ""));
+ //this.buttonList.add(new GuiButton(4, 370, height / 2 + 85, "Quit"));
+ //this.buttonList.add(new AltButton(6, 6, 6, ""));
+ if(mode == MMMode.DEFAULT) {
+
+
+ //this.buttonList.add(new GuiButton(6, 370, height / 2 + 85, "Discord"));
+ //this.buttonList.add(new DisButton(5, this.width / 2 - 452, this.height / 2 + 235, ""));
+ //this.buttonList.add(new Discord(8, 370, height / 2 + 85, ""));
+ //this.buttonList.add(new LilButton(7, this.width / 2 - 512, this.height / 2 + 235, ""));
+ this.buttonList.add(new SettingsButton(3, this.width / 2 - 0, this.height / 2 + 60, ""));
+ //this.buttonList.add(new CosmeticButtonMM(8, this.width / 2 - 25, this.height / 2 + 60, "")); //235
+ //this.buttonList.add(new WebsiteButton(9, this.width / 2 - 542, this.height / 2 + 235, ""));
+ //this.buttonList.add(new CosmeticsButton(8, 475, height / 2 + 35, ""));
+ //this.buttonList.add(new GuiButton(8, 435, height / 2 + 235, "Login"));
+ //this.buttonList.add(new LilButton2(10, 930, height / 2 + 235, "BG"));
+
+ this.buttonList.add(new MainMenuBtn(1, this.width / 2 - 100, this.height / 2 + 10, 200, 20,
+ I18n.format("Singleplayer", new Object[0])));
+ this.buttonList.add(new MainMenuBtn(2, this.width / 2 - 100, this.height / 2 + 34, 200, 20,
+ I18n.format("Multiplayer", new Object[0])));
+ }
+
+ //this.viewportTexture = new DynamicTexture(256, 256);
+ //this.backgroundTexture = this.mc.getTextureManager().getDynamicTextureLocation("background", this.viewportTexture);
+
+ //this.buttonList.add(new ClassicButton(10, width - 187, 3, 80, 20, "Change BG"));
+
+
+
+ //this.buttonList.add(new GuiButton(0, this.width / 2 - 100, 72 + 1, 98, 30, I18n.format("menu.options", new Object[0])));
+ //this.buttonList.add(new GuiButton(4, this.width / 2 + 2, j + 72 + 12, 98, 20, I18n.format("menu.quit", new Object[0])));
+ //this.buttonList.add(new GuiButtonLanguage(5, this.width / 2 - 124, j + 72 + 12));
+
+ synchronized (this.threadLock)
+ {
+ this.field_92023_s = this.fontRendererObj.getStringWidth(this.openGLWarning1);
+ this.field_92024_r = this.fontRendererObj.getStringWidth(this.openGLWarning2);
+ int k = Math.max(this.field_92023_s, this.field_92024_r);
+ this.field_92022_t = (this.width - k) / 2;
+ this.field_92021_u = ((GuiButton)this.buttonList.get(0)).yPosition - 24;
+ this.field_92020_v = this.field_92022_t + k;
+ this.field_92019_w = this.field_92021_u + 24;
+ }
+
+ this.mc.func_181537_a(false);
+
+
+ }else {
+ this.buttonList.add(new ClassicButton(4, this.width / 2 - 92, this.height / 2 + 25, 200, 20,
+ I18n.format("Banned", new Object[0])));
+ }
+ super.initGui();
+ }
+ @Override
+ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
+ ScaledResolution sr = new ScaledResolution(Minecraft.getMinecraft());
+
+ if(!Booleans.ban) {
+ boolean ingame = Minecraft.getMinecraft().theWorld != null && Minecraft.getMinecraft().thePlayer != null;
+
+ /*if(!ingame) {
+ GlStateManager.disableAlpha();
+ this.renderSkybox(mouseX, mouseY, partialTicks);
+ GlStateManager.enableAlpha();
+ }*/
+ Color gradientColor1 = ColorUtil.interpolateColorsBackAndForth(15, 1, NightSky.INSTANCE.getClientColor(), NightSky.INSTANCE.getAlternateClientColor(), false);
+ Color gradientColor2 = ColorUtil.interpolateColorsBackAndForth(15, 1, NightSky.INSTANCE.getAlternateClientColor(), NightSky.INSTANCE.getClientColor(), false);
+
+ this.mc.getTextureManager().bindTexture(new ResourceLocation("Animeware/background/old/bg69.png"));
+ Gui.drawModalRectWithCustomSizedTexture(0, 0, 0, 0, width, height, width, height);
+
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/logonobg.png"), this.width / 2 - 70, this.height / 2 - 117, 137, 135, Color.WHITE);
+
+ GL11.glColor4f(1, 1, 1, 1);
+ GlStateManager.enableAlpha();
+ GlStateManager.enableBlend();
+ //FontUtil.normal.drawString(NightSky.INSTANCE.NAME + " " + NightSky.INSTANCE.VERSION ,0 + 3, this.height - 11, -1);
+ //FontUtil.normal.drawString("Copyright Mojang Studios" ,sr.getScaledWidth() - 135, this.height - 11, -1);
+ //this.regular.drawStringWithShadow(NightSky.INSTANCE.NAME + " " + NightSky.INSTANCE.VERSION, 3.0F, (this.height - 12), -1);
+ //this.regular.drawStringWithShadow("Not Affiliated With Mojang AB.", (this.width - this.regular.getStringWidth("Not Affiliated Whit Mojang AB.") - 2), (this.height - 12), -1);
+ GlStateManager.pushMatrix();
+ GlStateManager.scale(3, 3, 1);
+ GlStateManager.popMatrix();
+ if(mode == MMMode.COSMETIC) {
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+ GlStateManager.enableAlpha();
+ GlStateManager.enableBlend();
+
+ ClickGUIUtil.renderCosmeticMenu();
+ }
+
+ super.drawScreen(mouseX, mouseY, partialTicks);
+ }
+ try {
+ if(MinecraftServer.getServer().isSinglePlayer()) {
+
+ NetworkPlayerInfo playerInfo = mc.getNetHandler().getPlayerInfo(mc.thePlayer.getUniqueID());
+ if(playerInfo != null) {
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+ }
+ } else if(Minecraft.getMinecraft().getCurrentServerData() != null) {
+ NetworkPlayerInfo playerInfo = mc.getNetHandler().getPlayerInfo(mc.thePlayer.getUniqueID());
+ if(playerInfo != null) {
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+ }
+
+ } else {
+
+ }
+ } catch(NullPointerException e) {
+ //e.printStackTrace();
+ }
+
+ GL11.glDisable(GL11.GL_SCISSOR_TEST);
+ checkMouseWheelCosmetic(mouseX, mouseY);
+ GL11.glPushMatrix();
+ GL11.glPushAttrib(GL11.GL_SCISSOR_BIT);
+ {
+ RenderUtil.scissor(this.width / 2 - 190, this.height / 2 - 110, this.width / 2 + 190, this.height / 2 + 110);
+ //RenderUtil.scissor2(this.width / 2 - 190, this.height / 2 - 110, 1920, 1080);
+ //RenderUtil.scissor(this.width / 2 - 100, -300, 1920, 1080);
+ GL11.glEnable(GL11.GL_SCISSOR_TEST);
+ }
+
+ super.drawScreen(mouseX, mouseY, partialTicks);
+ for(CosmeticButton cos : cosButtons) {
+ cos.draw();
+ }
+ GL11.glDisable(GL11.GL_SCISSOR_TEST);
+ GL11.glPopAttrib();
+ GL11.glPopMatrix();
+ }
+
+ @Override
+ protected void actionPerformed(GuiButton button) throws IOException {
+ if(button.id == 1) {
+ //NightSky.INSTANCE.config.saveAccount();
+ mc.displayGuiScreen(new GuiSelectWorld(null));
+ }
+ if(button.id == 2) {
+ mc.displayGuiScreen(new GuiMultiplayer(this));
+ }
+ if(button.id == 3) {
+ mc.displayGuiScreen(new GuiOptions(this, mc.gameSettings));
+ }
+ if(button.id == 4) {
+ //NightSky.INSTANCE.config.saveAccount();
+ mc.shutdown();
+ }
+ if(button.id == 6) {
+ mc.displayGuiScreen(new LoginScreen());
+ }
+
+ if(button.id == 5) {
+ try {
+ Desktop desktop = java.awt.Desktop.getDesktop();
+ URI oURL = new URI("https://discord.gg/bCYU3DrW");
+ desktop.browse(oURL);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ if(button.id == 7) {
+ this.mc.displayGuiScreen(new ClickGUI());
+ }
+ if(button.id == 8) {
+ setMode(MMMode.COSMETIC);
+ mc.displayGuiScreen(new MainMenu());
+ }
+ if(button.id == 9) {
+ try {
+ Desktop desktop = java.awt.Desktop.getDesktop();
+ URI oURL = new URI("https://github.com/hypnomacka");
+ desktop.browse(oURL);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ if(button.id == 10) {
+ bgid++;
+ if(bgid == 9) {
+ bgid = 0;
+ }
+ }
+ if(button.id == 11) {
+ setMode(MMMode.DEFAULT);
+ mc.displayGuiScreen(new MainMenu());
+
+ }
+
+
+
+ //if(button.id == 8) {
+
+ //}
+ //if(button.id == 8) {
+ //this.mc.displayGuiScreen(new AnimewareLoginScreen());
+ //}
+
+ super.actionPerformed(button);
+ }
+
+ private void drawPanorama(int p_73970_1_, int p_73970_2_, float p_73970_3_)
+ {
+ Tessellator tessellator = Tessellator.getInstance();
+ WorldRenderer worldrenderer = tessellator.getWorldRenderer();
+ GlStateManager.matrixMode(5889);
+ GlStateManager.pushMatrix();
+ GlStateManager.loadIdentity();
+ Project.gluPerspective(120.0F, 1.0F, 0.05F, 10.0F);
+ GlStateManager.matrixMode(5888);
+ GlStateManager.pushMatrix();
+ GlStateManager.loadIdentity();
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ GlStateManager.rotate(180.0F, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(90.0F, 0.0F, 0.0F, 1.0F);
+ GlStateManager.enableBlend();
+ GlStateManager.disableAlpha();
+ GlStateManager.disableCull();
+ GlStateManager.depthMask(false);
+ GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
+ int i = 8;
+
+ for (int j = 0; j < i * i; ++j)
+ {
+ GlStateManager.pushMatrix();
+ float f = ((float)(j % i) / (float)i - 0.5F) / 64.0F;
+ float f1 = ((float)(j / i) / (float)i - 0.5F) / 64.0F;
+ float f2 = 0.0F;
+ GlStateManager.translate(f, f1, f2);
+ GlStateManager.rotate(MathHelper.sin(((float)this.panoramaTimer + p_73970_3_) / 400.0F) * 25.0F + 20.0F, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(-((float)this.panoramaTimer + p_73970_3_) * 0.1F, 0.0F, 1.0F, 0.0F);
+
+ for (int k = 0; k < 6; ++k)
+ {
+ GlStateManager.pushMatrix();
+
+ if (k == 1)
+ {
+ GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F);
+ }
+
+ if (k == 2)
+ {
+ GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F);
+ }
+
+ if (k == 3)
+ {
+ GlStateManager.rotate(-90.0F, 0.0F, 1.0F, 0.0F);
+ }
+
+ if (k == 4)
+ {
+ GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F);
+ }
+
+ if (k == 5)
+ {
+ GlStateManager.rotate(-90.0F, 1.0F, 0.0F, 0.0F);
+ }
+
+ this.mc.getTextureManager().bindTexture(ClientPanorama.getTiles()[k]);
+ worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
+ int l = 255 / (j + 1);
+ float f3 = 0.0F;
+ worldrenderer.pos(-1.0D, -1.0D, 1.0D).tex(0.0D, 0.0D).color(255, 255, 255, l).endVertex();
+ worldrenderer.pos(1.0D, -1.0D, 1.0D).tex(1.0D, 0.0D).color(255, 255, 255, l).endVertex();
+ worldrenderer.pos(1.0D, 1.0D, 1.0D).tex(1.0D, 1.0D).color(255, 255, 255, l).endVertex();
+ worldrenderer.pos(-1.0D, 1.0D, 1.0D).tex(0.0D, 1.0D).color(255, 255, 255, l).endVertex();
+ tessellator.draw();
+ GlStateManager.popMatrix();
+ }
+
+ GlStateManager.popMatrix();
+ GlStateManager.colorMask(true, true, true, false);
+ }
+
+ worldrenderer.setTranslation(0.0D, 0.0D, 0.0D);
+ GlStateManager.colorMask(true, true, true, true);
+ GlStateManager.matrixMode(5889);
+ GlStateManager.popMatrix();
+ GlStateManager.matrixMode(5888);
+ GlStateManager.popMatrix();
+ GlStateManager.depthMask(true);
+ GlStateManager.enableCull();
+ GlStateManager.enableDepth();
+ }
+
+ /**
+ * Rotate and blurs the skybox view in the main menu
+ */
+ private void rotateAndBlurSkybox(float p_73968_1_)
+ {
+ this.mc.getTextureManager().bindTexture(this.backgroundTexture);
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
+ GL11.glCopyTexSubImage2D(GL11.GL_TEXTURE_2D, 0, 0, 0, 0, 0, 256, 256);
+ GlStateManager.enableBlend();
+ GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
+ GlStateManager.colorMask(true, true, true, false);
+ Tessellator tessellator = Tessellator.getInstance();
+ WorldRenderer worldrenderer = tessellator.getWorldRenderer();
+ worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
+ GlStateManager.disableAlpha();
+ int i = 3;
+
+ for (int j = 0; j < i; ++j)
+ {
+ float f = 1.0F / (float)(j + 1);
+ int k = this.width;
+ int l = this.height;
+ float f1 = (float)(j - i / 2) / 256.0F;
+ worldrenderer.pos((double)k, (double)l, (double)this.zLevel).tex((double)(0.0F + f1), 1.0D).color(1.0F, 1.0F, 1.0F, f).endVertex();
+ worldrenderer.pos((double)k, 0.0D, (double)this.zLevel).tex((double)(1.0F + f1), 1.0D).color(1.0F, 1.0F, 1.0F, f).endVertex();
+ worldrenderer.pos(0.0D, 0.0D, (double)this.zLevel).tex((double)(1.0F + f1), 0.0D).color(1.0F, 1.0F, 1.0F, f).endVertex();
+ worldrenderer.pos(0.0D, (double)l, (double)this.zLevel).tex((double)(0.0F + f1), 0.0D).color(1.0F, 1.0F, 1.0F, f).endVertex();
+ }
+
+ tessellator.draw();
+ GlStateManager.enableAlpha();
+ GlStateManager.colorMask(true, true, true, true);
+ }
+
+ /**
+ * Renders the skybox in the main menu
+ */
+ private void renderSkybox(int p_73971_1_, int p_73971_2_, float p_73971_3_)
+ {
+ this.mc.getFramebuffer().unbindFramebuffer();
+ GlStateManager.viewport(0, 0, 256, 256);
+ this.drawPanorama(p_73971_1_, p_73971_2_, p_73971_3_);
+ this.rotateAndBlurSkybox(p_73971_3_);
+ this.rotateAndBlurSkybox(p_73971_3_);
+ this.rotateAndBlurSkybox(p_73971_3_);
+ this.rotateAndBlurSkybox(p_73971_3_);
+ this.rotateAndBlurSkybox(p_73971_3_);
+ this.rotateAndBlurSkybox(p_73971_3_);
+ this.rotateAndBlurSkybox(p_73971_3_);
+ this.mc.getFramebuffer().bindFramebuffer(true);
+ GlStateManager.viewport(0, 0, this.mc.displayWidth, this.mc.displayHeight);
+ float f = this.width > this.height ? 120.0F / (float)this.width : 120.0F / (float)this.height;
+ float f1 = (float)this.height * f / 256.0F;
+ float f2 = (float)this.width * f / 256.0F;
+ int i = this.width;
+ int j = this.height;
+ Tessellator tessellator = Tessellator.getInstance();
+ WorldRenderer worldrenderer = tessellator.getWorldRenderer();
+ worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
+ worldrenderer.pos(0.0D, (double)j, (double)this.zLevel).tex((double)(0.5F - f1), (double)(0.5F + f2)).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex();
+ worldrenderer.pos((double)i, (double)j, (double)this.zLevel).tex((double)(0.5F - f1), (double)(0.5F - f2)).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex();
+ worldrenderer.pos((double)i, 0.0D, (double)this.zLevel).tex((double)(0.5F + f1), (double)(0.5F - f2)).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex();
+ worldrenderer.pos(0.0D, 0.0D, (double)this.zLevel).tex((double)(0.5F + f1), (double)(0.5F + f2)).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex();
+ tessellator.draw();
+ }
+
+ public void checkMouseWheelCosmetic(int mouseX, int mouseY) {
+ int mouseScrollCos = Mouse.getDWheel();
+ if(mouseScrollCos > 0) {
+ for(CosmeticButton b : cosButtons) {
+ b.y += 15;
+ }
+ } else if(mouseScrollCos < 0) {
+ for(CosmeticButton b : cosButtons) {
+ b.y -= 15;
+ }
+ }
+ }
+ @Override
+ protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException {
+ super.mouseClicked(mouseX, mouseY, mouseButton);
+
+ for(CosmeticButton cos : cosButtons) {
+ cos.onClick(mouseX, mouseY, mouseButton);
+ }
+ super.mouseClicked(mouseX, mouseY, mouseButton);
+ }
+
+}
+
diff --git a/src/minecraft/animeware/gui/mainmenu/MicrosoftButton.java b/src/minecraft/animeware/gui/mainmenu/MicrosoftButton.java
new file mode 100644
index 0000000..2fc9242
--- /dev/null
+++ b/src/minecraft/animeware/gui/mainmenu/MicrosoftButton.java
@@ -0,0 +1,140 @@
+//
+// Decompiled by Procyon v0.5.36
+//
+
+package animeware.gui.mainmenu;
+
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.client.renderer.Tessellator;
+import org.lwjgl.opengl.GL11;
+
+import animeware.util.font.FontUtil;
+
+import java.io.File;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.client.renderer.GlStateManager;
+import java.awt.Color;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiButton;
+
+public class MicrosoftButton extends GuiButton
+{
+ private int j6;
+ private int j10;
+ int fade;
+ int fade2;
+
+
+ public MicrosoftButton(final int i, final int j, final int k, final String s) {
+ this(i, j, k, 175, 21, s);
+
+ }
+
+ public MicrosoftButton(final int i, final int j, final int k, final int l, final int i1, final String s) {
+ super(i, j, k, l, i1, s);
+ this.enabled = true;
+ this.visible = true;
+ }
+
+ @Override
+ protected int getHoverState(final boolean flag) {
+ byte byte0 = 1;
+ if (!this.enabled) {
+ byte0 = 0;
+ }
+ else if (flag) {
+ byte0 = 2;
+ }
+ return byte0;
+ }
+
+ @Override
+ public void drawButton(final Minecraft mc, final int mouseX, final int mouseY) {
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ int j = -1;
+ if (this.hovered) {
+ j = new Color(0,210,220,0).getRGB();
+ }
+ if (!this.hovered) {
+ this.fade = 230;
+ }
+ else {
+ if (this.fade <= 50) {
+ return;
+ }
+ if (this.fade != 160) {
+ this.fade -= 10;
+ }
+ }
+ if (!this.hovered) {
+ this.fade2 = 200;
+ }
+ else {
+ if (this.fade2 <= 30) {
+ return;
+ }
+ if (this.fade2 != 200) {
+ this.fade2 += 10;
+ }
+ }
+ final float b = (float)(this.hovered ? new Color(0, 0, 255, 255).getRGB() : new Color(0, 0, 255, 255).getRGB());
+ final Color a = new Color(0, 0, 5, 100);
+ final Color a2 = new Color(100, 0, 0, this.fade2);
+ final Color a3 = new Color(80, 0, 0, this.fade);
+ if (this.xPosition >= this.xPosition && this.yPosition >= this.yPosition && this.xPosition < this.xPosition + this.width && this.yPosition < this.yPosition + this.height) {
+ final int n = 5;
+ final FontRenderer fr = mc.fontRendererObj;
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ //this.drawRoundedRect(this.xPosition - 1, this.yPosition - 1, this.width + 2, this.height + 2, 3, a2);
+ //this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a3);
+ this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a);
+ if(hovered) {
+ GlStateManager.color(0.0f, 0.8f, 0.9f);
+ } else {
+ GlStateManager.color(1.0f, 0.0f, 0.0f);
+ }
+
+ //Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/icons/logo.png"));
+ //Gui.drawModalRectWithCustomSizedTexture(this.xPosition + 3, this.yPosition + 3, 0.0f, 0.0f, 15, 15, 15.0f, 15.0f);
+ //Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/Microsoft.png"));
+ //Gui.drawModalRectWithCustomSizedTexture(this.xPosition + 3, this.yPosition + 3, 0.0f, 0.0f, 15, 15, 15.0f, 15.0f);
+ FontUtil.normal.drawCenteredString(this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 5) / 2, j);
+ }
+ }
+
+ private void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 270, 360, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 180, 270, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 180, color);
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+}
diff --git a/src/minecraft/animeware/gui/mainmenu/QuitButton.java b/src/minecraft/animeware/gui/mainmenu/QuitButton.java
new file mode 100644
index 0000000..8e2c03e
--- /dev/null
+++ b/src/minecraft/animeware/gui/mainmenu/QuitButton.java
@@ -0,0 +1,140 @@
+//
+// Decompiled by Procyon v0.5.36
+//
+
+package animeware.gui.mainmenu;
+
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.client.renderer.Tessellator;
+import org.lwjgl.opengl.GL11;
+
+import animeware.util.font.FontUtil;
+import animeware.util.render.RoundedUtils;
+
+import java.io.File;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.client.renderer.GlStateManager;
+import java.awt.Color;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiButton;
+
+public class QuitButton extends GuiButton
+{
+ private int j6;
+ private int j10;
+ int fade;
+ int red;
+ int fade2;
+
+
+ public QuitButton(final int i, final int j, final int k, final String s) {
+ this(i, j, k, 21, 21, s);
+
+ }
+
+ public QuitButton(final int i, final int j, final int k, final int l, final int i1, final String s) {
+ super(i, j, k, l, i1, s);
+ this.enabled = true;
+ this.visible = true;
+ }
+
+ @Override
+ protected int getHoverState(final boolean flag) {
+ byte byte0 = 1;
+ if (!this.enabled) {
+ byte0 = 0;
+ }
+ else if (flag) {
+ byte0 = 2;
+ }
+ return byte0;
+ }
+
+ @Override
+ public void drawButton(final Minecraft mc, final int mouseX, final int mouseY) {
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ int j = -1;
+ if (this.hovered) {
+ j = new Color(0,210,220,0).getRGB();
+ }
+
+ final float b = (float)(this.hovered ? new Color(0, 0, 255, 255).getRGB() : new Color(0, 0, 255, 255).getRGB());
+ final Color c = new Color(0, 0, 5, 70);
+ final Color a2 = new Color(100, 0, 0, this.fade2);
+ final Color a3 = new Color(0 , 0, 0, this.fade);
+ float f = this.hovered ? new Color(153, 9, 193).getRGB() : new Color(255,255,255,255).getRGB();
+ Color a = new Color(this.fade,0,0, 70);
+ if (this.xPosition >= this.xPosition && this.yPosition >= this.yPosition && this.xPosition < this.xPosition + this.width && this.yPosition < this.yPosition + this.height) {
+ final int n = 5;
+ final FontRenderer fr = mc.fontRendererObj;
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+
+ if(!hovered) {
+ this.fade = 2;
+ }
+ else {
+ if(this.fade <= 1) {
+ return;
+ }
+ if(this.fade != 130) {
+ this.fade += 5;
+ }
+ }
+ if(this.fade >= 120 && hovered) {
+ this.fade = 120;
+ }
+
+ //this.drawRoundedRect(this.xPosition - 1, this.yPosition - 1, this.width + 2, this.height + 2, 3, a2);
+ //this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a3);
+ this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a);
+ RoundedUtils.drawRoundedOutline(this.xPosition, this.yPosition, this.xPosition + 21, this.yPosition + 21, 8.0F, 2, new Color(0, 0, 0, 255).getRGB()); //this.width / 2 - 94, this.height / 2 + 5, this.width / 2 + 116, this.height / 2 + 85, 18.0F, 2, new Color(0, 140, 170, 255).getRGB()
+ if(hovered) {
+ GlStateManager.color(0.0f, 0.8f, 0.9f);
+ }else {
+ GlStateManager.color(1.0f, 1.0f, 1.0f);
+ }
+ //Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/icons/logo.png"));
+ //Gui.drawModalRectWithCustomSizedTexture(this.xPosition + 3, this.yPosition + 3, 0.0f, 0.0f, 15, 15, 15.0f, 15.0f);
+ Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/icons/quit.png"));
+ Gui.drawModalRectWithCustomSizedTexture(this.xPosition + 3, this.yPosition + 3, 0.0f, 0.0f, 15, 15, 15.0f, 15.0f);
+
+ FontUtil.normal.drawCenteredString(this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 5) / 2, j);
+ }
+ }
+
+ private void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 270, 360, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 180, 270, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 180, color);
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+}
diff --git a/src/minecraft/animeware/gui/mainmenu/SettingsButton.java b/src/minecraft/animeware/gui/mainmenu/SettingsButton.java
new file mode 100644
index 0000000..5a4d249
--- /dev/null
+++ b/src/minecraft/animeware/gui/mainmenu/SettingsButton.java
@@ -0,0 +1,135 @@
+//
+// Decompiled by Procyon v0.5.36
+//
+
+package animeware.gui.mainmenu;
+
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.client.renderer.Tessellator;
+import org.lwjgl.opengl.GL11;
+
+import animeware.util.font.FontUtil;
+import animeware.util.render.RoundedUtils;
+
+import java.io.File;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.client.renderer.GlStateManager;
+import java.awt.Color;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiButton;
+
+public class SettingsButton extends GuiButton
+{
+ private int j6;
+ private int j10;
+ int fade;
+ int fade2;
+
+
+ public SettingsButton(final int i, final int j, final int k, final String s) {
+ this(i, j, k, 21, 21, s);
+
+ }
+
+ public SettingsButton(final int i, final int j, final int k, final int l, final int i1, final String s) {
+ super(i, j, k, l, i1, s);
+ this.enabled = true;
+ this.visible = true;
+ }
+
+ @Override
+ protected int getHoverState(final boolean flag) {
+ byte byte0 = 1;
+ if (!this.enabled) {
+ byte0 = 0;
+ }
+ else if (flag) {
+ byte0 = 2;
+ }
+ return byte0;
+ }
+
+ @Override
+
+ public void drawButton(final Minecraft mc, final int mouseX, final int mouseY) {
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ int j = -1;
+ if (this.hovered) {
+ j = new Color(0,210,220,0).getRGB();
+ }
+
+ final float b = (float)(this.hovered ? new Color(0, 0, 255, 255).getRGB() : new Color(0, 0, 255, 255).getRGB());
+ final Color c = new Color(0, 0, 5, 70);
+ final Color a2 = new Color(100, 0, 0, this.fade2);
+ final Color a3 = new Color(80, 0, 0, this.fade);
+ float f = this.hovered ? new Color(153, 9, 193).getRGB() : new Color(255,255,255,255).getRGB();
+ Color a = new Color(0,0,0, this.fade);
+ if (this.xPosition >= this.xPosition && this.yPosition >= this.yPosition && this.xPosition < this.xPosition + this.width && this.yPosition < this.yPosition + this.height) {
+ final int n = 5;
+ final FontRenderer fr = mc.fontRendererObj;
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ if(!hovered) {
+ this.fade = 90;
+ }
+ else {
+ if(this.fade <= 30) {
+ return;
+ }
+ if(this.fade != 130) {
+ this.fade += 5;
+ }
+ }
+ //this.drawRoundedRect(this.xPosition - 1, this.yPosition - 1, this.width + 2, this.height + 2, 3, a2);
+ //this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a3);
+ this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a);
+ RoundedUtils.drawRoundedOutline(this.xPosition, this.yPosition, this.xPosition + 21, this.yPosition + 21, 8.0F, 2, new Color(0, 0, 0, 255).getRGB()); //this.width / 2 - 94, this.height / 2 + 5, this.width / 2 + 116, this.height / 2 + 85, 18.0F, 2, new Color(0, 140, 170, 255).getRGB()
+ if(hovered) {
+ GlStateManager.color(0.0f, 0.8f, 0.9f);
+ }else {
+ GlStateManager.color(1.0f, 1.0f, 1.0f);
+ }
+ //Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/icons/logo.png"));
+ //Gui.drawModalRectWithCustomSizedTexture(this.xPosition + 3, this.yPosition + 3, 0.0f, 0.0f, 15, 15, 15.0f, 15.0f);
+ Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/icons/settings.png"));
+ Gui.drawModalRectWithCustomSizedTexture(this.xPosition + 3, this.yPosition + 3, 0.0f, 0.0f, 15, 15, 15.0f, 15.0f);
+
+ FontUtil.normal.drawCenteredString(this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 5) / 2, j);
+ }
+ }
+
+ private void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 270, 360, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 180, 270, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 180, color);
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+}
diff --git a/src/minecraft/animeware/gui/splash/SplashProgress.java b/src/minecraft/animeware/gui/splash/SplashProgress.java
new file mode 100644
index 0000000..a0106ed
--- /dev/null
+++ b/src/minecraft/animeware/gui/splash/SplashProgress.java
@@ -0,0 +1,161 @@
+package animeware.gui.splash;
+
+import java.awt.Color;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.util.font.ucfont.UCFontRenderer;
+import animeware.util.render.DrawUtil;
+import animeware.util.render.RoundedUtils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.texture.TextureManager;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.client.shader.Framebuffer;
+import net.minecraft.util.ResourceLocation;
+
+public class SplashProgress {
+
+ private static final int MAX = 8;
+ private static int PROGRESS = 0;
+ private static String CURRENT = "";
+ private static ResourceLocation splash;
+ private static ResourceLocation logo;
+ private static UnicodeFontRenderer ufr;
+ static UCFontRenderer fr = new UCFontRenderer(new ResourceLocation("Animeware/font/font.ttf"), 23.0f);
+ static UCFontRenderer frn = new UCFontRenderer(new ResourceLocation("Animeware/font/font.ttf"), 26.0f);
+
+
+ public static void update() {
+ if(Minecraft.getMinecraft() == null || Minecraft.getMinecraft().getLanguageManager() == null) {
+ return;
+ }
+ drawSplash(Minecraft.getMinecraft().getTextureManager());
+ }
+
+ public static void setProgress(int givenProgress, String givenText) {
+ PROGRESS = givenProgress;
+ CURRENT = givenText;
+ update();
+ }
+
+ public static void drawSplash(TextureManager tm) {
+
+ ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
+ int scaleFactor = scaledResolution.getScaleFactor();
+
+ Framebuffer framebuffer = new Framebuffer(scaledResolution.getScaledWidth() * scaleFactor, scaledResolution.getScaledHeight() * scaleFactor, true);
+ framebuffer.bindFramebuffer(false);
+
+ GlStateManager.matrixMode(GL11.GL_PROJECTION);
+ GlStateManager.loadIdentity();
+ GlStateManager.ortho(0.0D, (double)scaledResolution.getScaledWidth(), (double)scaledResolution.getScaledHeight(), 0.0D, 1000.0D, 3000.0D);
+ GlStateManager.matrixMode(GL11.GL_MODELVIEW);
+ GlStateManager.loadIdentity();
+ GlStateManager.translate(0.0F, 0.0F, -2000.0F);
+ GlStateManager.disableLighting();
+ GlStateManager.disableFog();
+ GlStateManager.disableDepth();
+ GlStateManager.enableTexture2D();
+
+ if(splash == null) {
+ splash = new ResourceLocation("Animeware/background/old/bg2l.png");
+ }
+ tm.bindTexture(splash);
+ //DrawUtil.draw2DImage(new ResourceLocation("Animeware/logonobg.png"), GuiScreen.width / 2 - 70, GuiScreen.height / 2 - 117, 137, 135, Color.WHITE);
+ //FontUtil.normal.drawCenteredString(".", 213, 148, 0xFFFFFFFF);
+
+ GlStateManager.resetColor();
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+
+ Gui.drawScaledCustomSizeModalRect(0, 0, 0, 0, 1920, 1080, scaledResolution.getScaledWidth(), scaledResolution.getScaledHeight(), 1920, 1080);
+ drawProgress();
+ framebuffer.unbindFramebuffer();
+ framebuffer.framebufferRender(scaledResolution.getScaledWidth() * scaleFactor, scaledResolution.getScaledHeight() * scaleFactor);
+
+ GlStateManager.enableAlpha();
+ GlStateManager.alphaFunc(516, 0.1F);
+
+ Minecraft.getMinecraft().updateDisplay();
+ }
+
+ private static void drawProgress() {
+
+ if(Minecraft.getMinecraft().gameSettings == null || Minecraft.getMinecraft().getTextureManager() == null) {
+ return;
+ }
+
+ if(ufr == null) {
+ ufr = UnicodeFontRenderer.getFontOnPC("Calibri", 30);
+ }
+
+ ScaledResolution sr = new ScaledResolution(Minecraft.getMinecraft());
+
+ double nProgress = (double)PROGRESS;
+ double calc = (nProgress / MAX) * 150;
+
+ //Gui.drawRect(100, sr.getScaledHeight() - 35, sr.getScaledWidth(), sr.getScaledHeight(), new Color(0, 0, 0, 50).getRGB());
+
+ GlStateManager.resetColor();
+ resetTextureState();
+ String step = PROGRESS + "/" + MAX;
+ frn.drawCenteredString("NightSky", 310, 220, 0xFFFFFFFF);
+ fr.drawCenteredString(CURRENT, 310, 265, 0xFFFFFFFF);
+ //FontUtil.normal.drawCenteredString(".", 213, 148, 0xFFFFFFFF);
+
+
+ //ufr.drawString(step, sr.getScaledWidth() - 208 - ufr.getStringWidth(step), sr.getScaledHeight() - 80, 0xe1e1e1FF);
+
+ GlStateManager.resetColor();
+ resetTextureState();
+ //DrawUtil.draw2DImage(new ResourceLocation("Animeware/nightskytext.png"), 800 / 2 - 145, 600 / 2 - 75, 320, 100, Color.WHITE);
+ //DrawUtil.draw2DImage(new ResourceLocation("Animeware/nightskywhite.png"), sr.getScaledWidth(), sr.getScaledHeight(), 10, 10, Color.WHITE);
+ //Gui.drawRect(0, sr.getScaledHeight() - 2, (int)calc, sr.getScaledHeight(), new Color(0, 0, 144).getRGB());
+ //drawRoundedRect(0, sr.getScaledHeight() - 2, (int)calc, sr.getScaledHeight(), PROGRESS, PROGRESS, null);
+
+ DrawUtil.drawRoundedRect(200, 245, 150 + 280, sr.getScaledHeight() - 97, 10, new Color(0, 0, 0, 255).getRGB());
+
+ DrawUtil.drawRoundedRect(200, 245, (int)calc + 280, sr.getScaledHeight() - 97, 10, new Color(0, 200, 240, 255).getRGB());
+
+ RoundedUtils.drawRoundedOutline(200, 245, 150 + 280, sr.getScaledHeight() - 97, 10, 3, new Color(0, 0, 0, 255).getRGB());
+
+ //Gui.drawRect(0, sr.getScaledHeight() - 2, sr.getScaledWidth(), sr.getScaledHeight(), new Color(0, 0, 0, 10).getRGB());
+
+ }
+
+ private static void resetTextureState() {
+ GlStateManager.textureState[GlStateManager.activeTextureUnit]. textureName = -1;
+ }
+ private void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 270, 360, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 180, 270, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 180, color);
+ }
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+}
diff --git a/src/minecraft/animeware/gui/splash/UiSplashScreen.java b/src/minecraft/animeware/gui/splash/UiSplashScreen.java
new file mode 100644
index 0000000..de20e5e
--- /dev/null
+++ b/src/minecraft/animeware/gui/splash/UiSplashScreen.java
@@ -0,0 +1,76 @@
+package animeware.gui.splash;
+
+import java.awt.Color;
+
+import animeware.NightSky;
+import animeware.util.ClientPanorama;
+import animeware.util.render.GuiUtils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.shader.Framebuffer;
+import net.minecraft.util.ResourceLocation;
+
+public class UiSplashScreen {
+
+ private static final int MAX_STEPS = 5;
+ private static int currentStep = 0;
+ private static String currentText = "";
+
+ private static Minecraft mc = Minecraft.getMinecraft();
+
+ public static void update(String text) {
+ ++currentStep;
+ currentText = text;
+ renderSplashScreen();
+ }
+
+ public static void renderSplashScreen() {
+ ScaledResolution res = new ScaledResolution(mc);
+ int i = res.getScaleFactor();
+ Framebuffer framebuffer = new Framebuffer(res.getScaledWidth() * i, res.getScaledHeight() * i, true);
+ framebuffer.bindFramebuffer(false);
+ GlStateManager.matrixMode(5889);
+ GlStateManager.loadIdentity();
+ GlStateManager.ortho(0.0D, (double)res.getScaledWidth(), (double)res.getScaledHeight(), 0.0D, 1000.0D, 3000.0D);
+ GlStateManager.matrixMode(5888);
+ GlStateManager.loadIdentity();
+ GlStateManager.translate(0.0F, 0.0F, -2000.0F);
+ GlStateManager.disableLighting();
+ GlStateManager.disableFog();
+ GlStateManager.disableDepth();
+ GlStateManager.enableTexture2D();
+ GlStateManager.color(1.0F, 1.0F, 1.0F);
+
+ drawScreen(res);
+
+ GlStateManager.disableLighting();
+ GlStateManager.disableFog();
+ framebuffer.unbindFramebuffer();
+ framebuffer.framebufferRender(res.getScaledWidth() * i, res.getScaledHeight() * i);
+ GlStateManager.enableAlpha();
+ GlStateManager.alphaFunc(516, 0.1F);
+
+ mc.updateDisplay();
+ }
+
+ public static void drawScreen(ScaledResolution res) {
+ mc.getTextureManager().bindTexture(ClientPanorama.getBackground());
+ Gui.drawModalRectWithCustomSizedTexture(0, 0, 0, 0, res.getScaledWidth(), res.getScaledHeight(), res.getScaledWidth(), res.getScaledHeight());
+
+ mc.getTextureManager().bindTexture(new ResourceLocation("lux/logo.png"));
+ Gui.drawModalRectWithCustomSizedTexture(res.getScaledWidth() / 2 - 26, res.getScaledHeight() / 2 - 60, 0, 0, 52, 52, 52, 52);
+ mc.fontRendererObj.drawString(NightSky.mcname, res.getScaledWidth() / 2, res.getScaledHeight() / 2 - 8, -1);
+
+ GuiUtils.drawRoundedRect(res.getScaledWidth() / 2 - 90, res.getScaledHeight() / 2 + 20, 180, 10, 3, new Color(255, 255, 255, 30).getRGB());
+
+ double progressWidth = ((double) currentStep / MAX_STEPS) * 180;
+ if(progressWidth != 0)
+ GuiUtils.drawRoundedRect(res.getScaledWidth() / 2 - 90, res.getScaledHeight() / 2 + 19, (int) progressWidth, 12, 3, -1);
+
+ GuiUtils.drawRoundedOutline(res.getScaledWidth() / 2 - 90, res.getScaledHeight() / 2 + 20, res.getScaledWidth() / 2 + 90, res.getScaledHeight() / 2 + 30, 4, res.getScaleFactor(), new Color(255, 255, 255, 150).getRGB());
+ mc.fontRendererObj.drawString(currentText.toUpperCase(), res.getScaledWidth() / 2, res.getScaledHeight() / 2 + 32, new Color(255, 255, 255, 150).getRGB());
+ }
+
+}
diff --git a/src/minecraft/animeware/gui/splash/UnicodeFontRenderer.java b/src/minecraft/animeware/gui/splash/UnicodeFontRenderer.java
new file mode 100644
index 0000000..07a51f3
--- /dev/null
+++ b/src/minecraft/animeware/gui/splash/UnicodeFontRenderer.java
@@ -0,0 +1,386 @@
+package animeware.gui.splash;
+
+import java.awt.Font;
+import java.awt.FontFormatException;
+import java.awt.GraphicsEnvironment;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+
+import org.lwjgl.opengl.GL11;
+import org.newdawn.slick.UnicodeFont;
+import org.newdawn.slick.font.effects.ColorEffect;
+
+import animeware.NightSky;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.util.StringUtils;
+
+
+public class UnicodeFontRenderer {
+
+ public static UnicodeFontRenderer getFontOnPC(String name, int size) {
+ return getFontOnPC(name, size, Font.PLAIN);
+ }
+
+ public static UnicodeFontRenderer getFontOnPC(String name, int size, int fontType) {
+ return getFontOnPC(name, size, fontType, 0);
+ }
+
+ public static UnicodeFontRenderer getFontOnPC(String name, int size, int fontType, float kerning) {
+ return getFontOnPC(name, size, fontType, kerning, 3.0f);
+ }
+
+ public static UnicodeFontRenderer getFontOnPC(String name, int size, int fontType, float kerning, float antiAliasingFactor) {
+ return new UnicodeFontRenderer(new Font(name, fontType, size), kerning, antiAliasingFactor);
+ }
+
+ public static UnicodeFontRenderer getFontFromAssets(String name, int size) {
+ return getFontOnPC(name, size, Font.PLAIN);
+ }
+
+ public static UnicodeFontRenderer getFontFromAssets(String name, int size, int fontType) {
+ return getFontOnPC(name, fontType, size, 0);
+ }
+
+ public static UnicodeFontRenderer getFontFromAssets(String name, int size, float kerning, int fontType) {
+ return getFontFromAssets(name, size, fontType, kerning, 3.0f);
+ }
+
+ public static UnicodeFontRenderer getFontFromAssets(String name, int size, int fontType, float kerning, float antiAliasingFactor) {
+ return new UnicodeFontRenderer(name, fontType, size, kerning, antiAliasingFactor);
+ }
+
+
+ /*-------------------------------------------------------------------------------------------------------------------*/
+
+ public final int FONT_HEIGHT = 9;
+ private final int[] colorCodes = new int[32];
+ private final float kerning;
+ private final Map cachedStringWidth = new HashMap<>();
+ private float antiAliasingFactor;
+ private UnicodeFont unicodeFont;
+
+ private UnicodeFontRenderer(String fontName, int fontType, float fontSize, float kerning, float antiAliasingFactor) {
+ this.antiAliasingFactor = antiAliasingFactor;
+ try {
+ this.unicodeFont = new UnicodeFont(getFontByName(fontName).deriveFont(fontSize * this.antiAliasingFactor));
+ } catch (FontFormatException | IOException e) {
+ e.printStackTrace();
+ }
+ this.kerning = kerning;
+
+ this.unicodeFont.addAsciiGlyphs();
+ this.unicodeFont.getEffects().add(new ColorEffect(java.awt.Color.WHITE));
+
+ try {
+ this.unicodeFont.loadGlyphs();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ for (int i = 0; i < 32; i++) {
+ int shadow = (i >> 3 & 1) * 85;
+ int red = (i >> 2 & 1) * 170 + shadow;
+ int green = (i >> 1 & 1) * 170 + shadow;
+ int blue = (i & 1) * 170 + shadow;
+
+ if (i == 6) {
+ red += 85;
+ }
+
+ if (i >= 16) {
+ red /= 4;
+ green /= 4;
+ blue /= 4;
+ }
+
+ this.colorCodes[i] = (red & 255) << 16 | (green & 255) << 8 | blue & 255;
+ }
+ }
+
+ private UnicodeFontRenderer(Font font, float kerning, float antiAliasingFactor) {
+ this.antiAliasingFactor = antiAliasingFactor;
+ this.unicodeFont = new UnicodeFont(new Font(font.getName(), font.getStyle(), (int) (font.getSize() * antiAliasingFactor)));
+ this.kerning = kerning;
+
+ this.unicodeFont.addAsciiGlyphs();
+ this.unicodeFont.getEffects().add(new ColorEffect(java.awt.Color.WHITE));
+
+ try {
+ this.unicodeFont.loadGlyphs();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ for (int i = 0; i < 32; i++) {
+ int shadow = (i >> 3 & 1) * 85;
+ int red = (i >> 2 & 1) * 170 + shadow;
+ int green = (i >> 1 & 1) * 170 + shadow;
+ int blue = (i & 1) * 170 + shadow;
+
+ if (i == 6) {
+ red += 85;
+ }
+
+ if (i >= 16) {
+ red /= 4;
+ green /= 4;
+ blue /= 4;
+ }
+
+ this.colorCodes[i] = (red & 255) << 16 | (green & 255) << 8 | blue & 255;
+ }
+ }
+
+ private Font getFontByName(String name) throws IOException, FontFormatException {
+ return getFontFromInput("/assets/minecraft/clientname/fonts/" + name + ".ttf");
+ }
+
+ private Font getFontFromInput(String path) throws IOException, FontFormatException {
+ return Font.createFont(Font.TRUETYPE_FONT, NightSky.class.getResourceAsStream(path));
+ }
+
+ public void drawStringScaled(String text, int givenX, int givenY, int color, double givenScale) {
+
+ GL11.glPushMatrix();
+ GL11.glTranslated(givenX, givenY, 0);
+ GL11.glScaled(givenScale, givenScale, givenScale);
+ drawString(text, 0, 0, color);
+ GL11.glPopMatrix();
+
+ }
+
+ public int drawString(String text, float x, float y, int color) {
+ if (text == null)
+ return 0;
+
+ x *= 2.0F;
+ y *= 2.0F;
+
+ float originalX = x;
+
+ GL11.glPushMatrix();
+ GlStateManager.scale(1 / antiAliasingFactor, 1 / antiAliasingFactor, 1 / antiAliasingFactor);
+ GL11.glScaled(0.5F, 0.5F, 0.5F);
+ x *= antiAliasingFactor;
+ y *= antiAliasingFactor;
+ float red = (float) (color >> 16 & 255) / 255.0F;
+ float green = (float) (color >> 8 & 255) / 255.0F;
+ float blue = (float) (color & 255) / 255.0F;
+ float alpha = (float) (color >> 24 & 255) / 255.0F;
+ GlStateManager.color(red, green, blue, alpha);
+
+ boolean blend = GL11.glIsEnabled(GL11.GL_BLEND);
+ boolean lighting = GL11.glIsEnabled(GL11.GL_LIGHTING);
+ boolean texture = GL11.glIsEnabled(GL11.GL_TEXTURE_2D);
+ if (!blend)
+ GL11.glEnable(GL11.GL_BLEND);
+ if (lighting)
+ GL11.glDisable(GL11.GL_LIGHTING);
+ if (texture)
+ GL11.glDisable(GL11.GL_TEXTURE_2D);
+
+ int currentColor = color;
+ char[] characters = text.toCharArray();
+
+ int index = 0;
+ for (char c : characters) {
+ if (c == '\r') {
+ x = originalX;
+ }
+ if (c == '\n') {
+ y += getHeight(Character.toString(c)) * 2.0F;
+ }
+ if (c != '\247' && (index == 0 || index == characters.length - 1 || characters[index - 1] != '\247')) {
+ //Line causing error
+ unicodeFont.drawString(x, y, Character.toString(c), new org.newdawn.slick.Color(currentColor));
+ x += (getWidth(Character.toString(c)) * 2.0F * antiAliasingFactor);
+ } else if (c == ' ') {
+ x += unicodeFont.getSpaceWidth();
+ } else if (c == '\247' && index != characters.length - 1) {
+ int codeIndex = "0123456789abcdefg".indexOf(text.charAt(index + 1));
+ if (codeIndex < 0) continue;
+
+ currentColor = this.colorCodes[codeIndex];
+ }
+
+ index++;
+ }
+
+ GL11.glScaled(2.0F, 2.0F, 2.0F);
+ if (texture)
+ GL11.glEnable(GL11.GL_TEXTURE_2D);
+ if (lighting)
+ GL11.glEnable(GL11.GL_LIGHTING);
+ if (!blend)
+ GL11.glDisable(GL11.GL_BLEND);
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ GL11.glPopMatrix();
+ return (int) x / 2;
+ }
+
+ public int drawStringWithShadow(String text, float x, float y, int color) {
+ drawString(StringUtils.stripControlCodes(text), x + 0.5F, y + 0.5F, 0x000000);
+ return drawString(text, x, y, color);
+ }
+
+ public void drawCenteredString(String text, float x, float y, int color) {
+ drawString(text, x - (int) getWidth(text) / 2, y, color);
+ }
+
+ public void drawCenteredTextScaled(String text, int givenX, int givenY, int color, double givenScale) {
+
+ GL11.glPushMatrix();
+ GL11.glTranslated(givenX, givenY, 0);
+ GL11.glScaled(givenScale, givenScale, givenScale);
+ drawCenteredString(text, 0, 0, color);
+ GL11.glPopMatrix();
+
+ }
+
+ public void drawCenteredStringWithShadow(String text, float x, float y, int color) {
+ drawCenteredString(StringUtils.stripControlCodes(text), x + 0.5F, y + 0.5F, color);
+ drawCenteredString(text, x, y, color);
+ }
+
+ public float getWidth(final String s) {
+ if (cachedStringWidth.size() > 1000)
+ cachedStringWidth.clear();
+ return cachedStringWidth.computeIfAbsent(s, new Function() {
+ @Override
+ public Float apply(String e) {
+ float width = 0.0F;
+ String str = StringUtils.stripControlCodes(s);
+ for (char c : str.toCharArray()) {
+ width += unicodeFont.getWidth(Character.toString(c)) + UnicodeFontRenderer.this.kerning;
+ }
+
+ return width / 2.0F / antiAliasingFactor;
+ }
+ });
+
+ }
+
+ public int getStringWidth(String text) {
+ if (text == null) {
+ return 0;
+ } else {
+ int i = 0;
+ boolean flag = false;
+
+ for (int j = 0; j < text.length(); ++j) {
+ char c0 = text.charAt(j);
+ float k = this.getWidth(String.valueOf(c0));
+
+ if (k < 0 && j < text.length() - 1) {
+ ++j;
+ c0 = text.charAt(j);
+
+ if (c0 != 'l' && c0 != 'L') {
+ if (c0 == 'r' || c0 == 'R') {
+ flag = false;
+ }
+ } else {
+ flag = true;
+ }
+
+ k = 0;
+ }
+
+ i += k;
+
+ if (flag && k > 0) {
+ ++i;
+ }
+ }
+
+ return i;
+ }
+ }
+
+ public float getCharWidth(char c) {
+ return unicodeFont.getWidth(String.valueOf(c));
+ }
+
+ public float getHeight(String s) {
+ return unicodeFont.getHeight(s) / 2.0F;
+ }
+
+ public UnicodeFont getFont() {
+ return this.unicodeFont;
+ }
+
+ public String trimStringToWidth(String par1Str, int par2) {
+ StringBuilder var4 = new StringBuilder();
+ float var5 = 0.0F;
+ int var6 = 0;
+ int var7 = 1;
+ boolean var8 = false;
+ boolean var9 = false;
+
+ for (int var10 = var6; var10 >= 0 && var10 < par1Str.length() && var5 < (float) par2; var10 += var7) {
+ char var11 = par1Str.charAt(var10);
+ float var12 = this.getCharWidth(var11);
+
+ if (var8) {
+ var8 = false;
+
+ if (var11 != 108 && var11 != 76) {
+ if (var11 == 114 || var11 == 82) {
+ var9 = false;
+ }
+ } else {
+ var9 = true;
+ }
+ } else if (var12 < 0.0F) {
+ var8 = true;
+ } else {
+ var5 += var12;
+
+ if (var9) {
+ ++var5;
+ }
+ }
+
+ if (var5 > (float) par2) {
+ break;
+ } else {
+ var4.append(var11);
+ }
+ }
+
+ return var4.toString();
+ }
+
+ public void drawSplitString(ArrayList lines, int x, int y, int color) {
+ drawString(
+ String.join("\n\r", lines),
+ x,
+ y,
+ color
+ );
+ }
+
+ public List splitString(String text, int wrapWidth) {
+ List lines = new ArrayList<>();
+
+ String[] splitText = text.split(" ");
+ StringBuilder currentString = new StringBuilder();
+
+ for (String word : splitText) {
+ String potential = currentString + " " + word;
+
+ if (getWidth(potential) >= wrapWidth) {
+ lines.add(currentString.toString());
+ currentString = new StringBuilder();
+ }
+ currentString.append(word).append(" ");
+ }
+ lines.add(currentString.toString());
+ return lines;
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/Category.java b/src/minecraft/animeware/hud/Category.java
new file mode 100644
index 0000000..96199f6
--- /dev/null
+++ b/src/minecraft/animeware/hud/Category.java
@@ -0,0 +1,19 @@
+package animeware.hud;
+
+public enum Category {
+
+ HUD("HUD", 130),
+ MISC("Misc", 130*2),
+ WORLD("World", 130 * 3),
+ PLAYER("Player", 130 * 4),
+ /*COSMETIC("Cosmetic", 200 * 4)*/;
+
+
+ public String name;
+ public int pos;
+ Category(String name, int pos) {
+ this.name = name;
+ this.pos = pos;
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/DraggableComponent.java b/src/minecraft/animeware/hud/DraggableComponent.java
new file mode 100644
index 0000000..d2bba29
--- /dev/null
+++ b/src/minecraft/animeware/hud/DraggableComponent.java
@@ -0,0 +1,83 @@
+package animeware.hud;
+
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import org.lwjgl.input.Mouse;
+
+public class DraggableComponent {
+
+ private int x;
+ private int y;
+ private int width;
+ private int height;
+ private int color;
+ private int lastX;
+ private int lastY;
+
+ private boolean dragging;
+
+ public DraggableComponent(int x, int y, int width, int height, int color){
+ this.width = width;
+ this.height = height;
+ this.x = x;
+ this.y = y;
+ this.color = color;
+ }
+
+ public int getxPosition() {
+ return x;
+ }
+
+ public int getyPosition() {
+ return y;
+ }
+
+ public void setxPosition(int x) {
+ this.x = x;
+ }
+
+ public void setyPosition(int y) {
+ this.y = y;
+ }
+
+ public int getHeight() {
+ return height;
+ }
+
+ public int getWidth() {
+ return width;
+ }
+
+ public int getColor() {
+ return color;
+ }
+
+ public void setColor(int color) {
+ this.color = color;
+ }
+
+ public void draw(int mouseX, int mouseY){
+ draggingFix(mouseX, mouseY);
+ Gui.drawRect(this.getxPosition(), this.getyPosition(), this.getxPosition()+this.getWidth(), this.getyPosition()+this.getHeight(), this.getColor());
+ boolean mouseOverX = (mouseX >= this.getxPosition() && mouseX <= this.getxPosition()+this.getWidth());
+ boolean mouseOverY = (mouseY >= this.getyPosition() && mouseY <= this.getyPosition()+this.getHeight());
+ if(mouseOverX && mouseOverY){
+ if(Mouse.isButtonDown(0)){
+ if (!this.dragging) {
+ this.lastX = x - mouseX;
+ this.lastY = y - mouseY;
+ this.dragging = true;
+ }
+ }
+ }
+ }
+
+ private void draggingFix(int mouseX, int mouseY) {
+ if (this.dragging) {
+ this.x = mouseX + this.lastX;
+ this.y = mouseY + this.lastY;
+ if(!Mouse.isButtonDown(0)) this.dragging = false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/hud/HUDConfigScreen.java b/src/minecraft/animeware/hud/HUDConfigScreen.java
new file mode 100644
index 0000000..efa9d94
--- /dev/null
+++ b/src/minecraft/animeware/hud/HUDConfigScreen.java
@@ -0,0 +1,97 @@
+package animeware.hud;
+
+import java.awt.Color;
+import java.io.IOException;
+
+import animeware.NightSky;
+import animeware.gui.clickgui.ClickGUI;
+import animeware.gui.mainmenu.ClassicButton;
+import animeware.hud.mod.HudMod;
+import animeware.util.render.DrawUtil;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.util.ResourceLocation;
+
+public class HUDConfigScreen extends GuiScreen {
+
+ private HudMod m;
+ boolean hovered;
+
+ @Override
+ public void initGui() {
+ super.initGui();
+ mc.entityRenderer.loadShader(new ResourceLocation("Animeware/blur.json"));
+ //Minecraft.getMinecraft().entityhudMod..loadShader(new ResourceLocation("shaders/post/blur.json"));
+ this.buttonList.add(new ClassicButton(69, this.width / 2 - 50, this.height / 2 - 10, 100, 20, "Open GUI"));
+ //this.buttonList.add(new ClassicButton(70, this.width / 2 - 50, this.height / 2 + 12, 100, 20, "Jus test"));
+ //this.buttonList.add(new ClassicButton(71, this.width / 2 - 50, this.height / 2 + 32, 100, 20, "Open Cosmetics"));
+ }
+
+ @Override
+ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
+ //this.drawHollowRect(m.getX(), m.getY(), m.getWidth(), m.getHeight(), -1);
+ //HudMod m = new HudMod(m.name, m.description, m.icon, m.getX(), m.getY());
+ //super.drawDefaultBackground();
+ //this.drawHollowRect(m.getX(), m.getY(), m.getWidth(), m.getHeight(), -1);
+ //Gui.drawRect(m.getY(), partialTicks, m.getX(), partialTicks, mouseY);
+ //mc.getTextureManager().bindTexture(new ResourceLocation ("Animeware/nightskywhite.png"));
+ //this.drawModalRectWithCustomSizedTexture(355, 70, 0, 0, 250, 250, 250, 250);
+
+ //DrawUtil.draw2DImage(new ResourceLocation("Animeware/nightskywhite.png"), this.width / 2 - 35, this.height / 2 - 90, 70, 70, Color.WHITE);
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/logonobg.png"), this.width / 2 - 59, this.height / 2 - 117, 117, 115, Color.WHITE);
+
+ for(HudMod m : NightSky.INSTANCE.hudManager.hudMods) {
+ if(m.isEnabled()) {
+ m.renderDummy(mouseX, mouseY);
+ if(m.getWidth() == 0|| m.getHeight() == 0) {
+
+ } else {
+ this.drawHollowRect(m.getX(), m.getY(), m.getWidth(), m.getHeight(), -1);
+ }
+ }
+ }
+
+
+ super.drawScreen(mouseX, mouseY, partialTicks);
+ }
+
+
+
+ @Override
+ protected void actionPerformed(GuiButton button) throws IOException {
+ super.actionPerformed(button);
+ switch(button.id) {
+ case 69:
+ mc.displayGuiScreen(new ClickGUI());
+ break;
+
+ /*case 71: //VYRIESIT!!!!!
+ mc.displayGuiScreen(new CosmeticGUI());
+ break;*/
+ }
+ }
+ public void drawHollowRect(int x, int y, int w, int h, int color) {
+
+ this.drawHorizontalLine(x, x + w, y, color);
+ this.drawHorizontalLine(x, x + w, y + h, color);
+
+ this.drawVerticalLine(x, y + h, y, color);
+ this.drawVerticalLine(x + w, y + h, y, color);
+
+ }
+ public static void drawOutlinedRect(int left, int top, int right, int bottom, int rectColor, int outlineColor) {
+ Gui gui = new Gui();
+ gui.drawRect(left + 1, top, right - 1, bottom, rectColor);
+ gui.drawHorizontalLine(left, right - 1, top, outlineColor);
+ gui.drawHorizontalLine(left, right - 1, bottom, outlineColor);
+ gui.drawVerticalLine(left, top, bottom, outlineColor);
+ gui.drawVerticalLine(right - 1, top, bottom, outlineColor);
+ }
+ @Override
+ public void onGuiClosed() {
+ super.onGuiClosed();
+ mc.entityRenderer.stopUseShader();
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/IRenderer.java b/src/minecraft/animeware/hud/IRenderer.java
new file mode 100644
index 0000000..b32f58a
--- /dev/null
+++ b/src/minecraft/animeware/hud/IRenderer.java
@@ -0,0 +1,46 @@
+package animeware.hud;
+
+import animeware.hud.mod.IConfigExchange;
+
+public interface IRenderer extends IConfigExchange{
+
+ /**
+ * Returns the height of the currently rendered HUD.
+ *
+ * @return The height in pixel.
+ */
+ int getHeight();
+ public default boolean isEnabled() {
+ return true;
+ }
+
+ /**
+ * Returns the width of the currently rendered HUD.
+ *
+ * @return The width in pixel.
+ */
+ int getWidth();
+
+ /**
+ * Render the HUD at the given position.
+ */
+ void render(ScreenPosition position);
+
+
+ /**
+ * Render the HUD at the given position,
+ * used to for the configuration screen
+ * where you can move it around.
+ */
+ void renderDummy(ScreenPosition position);
+
+ /**
+ * Can be used to disable the renderer
+ * more conveniently than unregistering
+ * it from the API.
+ */
+ /*public default boolean isEnabled() {
+ return true;
+ }*/
+
+}
diff --git a/src/minecraft/animeware/hud/ScreenPosition.java b/src/minecraft/animeware/hud/ScreenPosition.java
new file mode 100644
index 0000000..6a4cb42
--- /dev/null
+++ b/src/minecraft/animeware/hud/ScreenPosition.java
@@ -0,0 +1,100 @@
+package animeware.hud;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.ScaledResolution;
+
+public final class ScreenPosition{
+
+ private static final Minecraft mc = Minecraft.getMinecraft();
+
+ private double x, y;
+
+ private ScreenPosition(double x, double y){
+ setRelative(x, y);
+ }
+
+ private ScreenPosition(int x, int y){
+ setAbsolute(x, y);
+ }
+
+ /**
+ * Creates a new ScreenPosition object based on relative coordinates.
+ * From 0 to 1. Example: 0.3 being 30% of the screen size.
+ *
+ * @param x Relative screen x value (horizontal) of the position.
+ * @param y Relative screen y value (vertical) of the position.
+ * @return The created ScreenPosition object.
+ */
+ public static ScreenPosition fromRelativePosition(double x, double y){
+ return new ScreenPosition(x, y);
+ }
+
+ /**
+ * Creates a new ScreenPosition object based on absolute coordinates.
+ * Example: 300 being 300 pixels.
+ *
+ * @param x Absolute screen x value (horizontal) of the position.
+ * @param y Absolute screen y value (vertical) of the position.
+ * @return The created ScreenPosition object.
+ */
+ public static ScreenPosition fromAbsolutePosition(int x, int y){
+ return new ScreenPosition(x, y);
+ }
+
+
+ /**
+ * @return The absolute x coordinate in pixel.
+ */
+ public int getAbsoluteX(){
+ ScaledResolution res = new ScaledResolution(mc);
+ return (int)(x * res.getScaledWidth());
+ }
+
+ /**
+ * @return The absolute y coordinate in pixel.
+ */
+ public int getAbsoluteY(){
+ ScaledResolution res = new ScaledResolution(mc);
+ return (int)(y * res.getScaledHeight());
+ }
+
+ /**
+ * @return The relative x coordinate, ranging from 0 to 1.
+ */
+ public double getRelativeX(){
+ return x;
+ }
+
+ /**
+ * @return The relative y coordinate, ranging from 0 to 1.
+ */
+ public double getRelativeY(){
+ return y;
+ }
+
+ /**
+ * @param x The relative x coordinate to be set. Ranging from 0 to 1.
+ * @param y The relative y coordinate to be set. Ranging from 0 to 1.
+ */
+ public void setRelative(double x, double y){
+ this.x = x;
+ this.y = y;
+ }
+
+ /**
+ * @param x The absolute x coordinate to be set.
+ * @param y The absolute y coordinate to be set.
+ */
+ public void setAbsolute(int x, int y){
+ ScaledResolution res = new ScaledResolution(mc);
+ this.x = (double)x / res.getScaledWidth();
+ this.y = (double)y / res.getScaledHeight();
+ }
+
+ @Override
+ public String toString(){
+ return String.format(getClass().getSimpleName() + "[absoluteX=%d,absoluteY=%d,relativeX=%.1f,relativeY=%.1f]", this.getAbsoluteX(), this.getAbsoluteY(), this.getRelativeX(), this.getRelativeY());
+ }
+
+}
+
diff --git a/src/minecraft/animeware/hud/mod/Freelook.java b/src/minecraft/animeware/hud/mod/Freelook.java
new file mode 100644
index 0000000..22e393e
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Freelook.java
@@ -0,0 +1,132 @@
+package animeware.hud.mod;
+
+import org.lwjgl.input.Keyboard;
+import org.lwjgl.opengl.Display;
+
+import animeware.cosmetic.Booleans;
+import animeware.event.impl.KeyEvent;
+import animeware.hud.Category;
+import animeware.hud.ScreenPosition;
+import net.minecraft.util.ResourceLocation;
+
+public class Freelook extends HudMod {
+
+ public Freelook() {
+ super("Freelook", "Toggles perspective", new ResourceLocation("Animeware/icons/direction.png"), 0, 0);
+ // TODO Auto-generated constructor stub
+ }
+ @Override
+ public void onEnable() {
+ Booleans.freelook = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.freelook = false;
+ //super.onDisable();
+ }
+ private boolean returnOnRelease = true;
+ public static boolean freelooking = false;
+
+ public float cameraYaw = 0f;
+ public float cameraPitch = 0f;
+ public int previousF5 = 0;
+
+ /*//@EventTarget
+ public void onKey(KeyEvent e) {
+
+ if(e.getKey() == mc.gameSettings.FREELOOK.getKeyCode() && this.isEnabled) {
+ if (Keyboard.getEventKeyState())
+ {
+ System.out.println("frelloked");
+ freelooking = !freelooking;
+ cameraYaw = mc.thePlayer.rotationYaw;
+ cameraPitch = mc.thePlayer.rotationPitch;
+
+ if (freelooking)
+ {
+ previousF5 = mc.gameSettings.thirdPersonView;
+ mc.gameSettings.thirdPersonView = 1;
+ }
+ else
+ {
+ mc.gameSettings.thirdPersonView = previousF5;
+ }
+ }
+ else if (returnOnRelease)
+ {
+ freelooking = false;
+ mc.gameSettings.thirdPersonView = previousF5;
+ }
+ }
+
+ if (Keyboard.getEventKey() == mc.gameSettings.keyBindTogglePerspective.getKeyCode())
+ {
+ freelooking = false;
+ }
+
+ }
+
+ */
+
+ public boolean overrideMouse()
+ {
+ if (mc.inGameHasFocus && Display.isActive())
+ {
+ if (!freelooking)
+ {
+ return true;
+ }
+
+ // CODE
+ mc.mouseHelper.mouseXYChange();
+ float f1 = mc.gameSettings.mouseSensitivity * 0.6F + 0.2F;
+ float f2 = f1 * f1 * f1 * 8.0F;
+ float f3 = (float) mc.mouseHelper.deltaX * f2;
+ float f4 = (float) mc.mouseHelper.deltaY * f2;
+
+ cameraYaw += f3 * 0.15F;
+ cameraPitch += f4 * 0.15F;
+
+ if (cameraPitch > 90) cameraPitch = 90;
+ if (cameraPitch < -90) cameraPitch = -90;
+ }
+
+ return false;
+ }
+ public float getCameraYaw()
+ {
+ return freelooking ? cameraYaw : mc.thePlayer.rotationYaw;
+ }
+
+ public float getCameraPitch()
+ {
+ return freelooking ? cameraPitch : mc.thePlayer.rotationPitch;
+ }
+
+ /*
+ @Override
+ public int getWidth() {
+ return fr.getStringWidth("[Freelooking]");
+ }
+
+ @Override
+ public int getHeight() {
+ return fr.FONT_HEIGHT;
+ }
+
+
+
+ @Override
+ public void draw() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ // TODO Auto-generated method stub
+ super.renderDummy(mouseX, mouseY);
+ }*/
+
+}
diff --git a/src/minecraft/animeware/hud/mod/HudManager.java b/src/minecraft/animeware/hud/mod/HudManager.java
new file mode 100644
index 0000000..419d2d8
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/HudManager.java
@@ -0,0 +1,334 @@
+package animeware.hud.mod;
+
+import java.util.ArrayList;
+
+import animeware.hud.mod.Mods.ArmorStatus;
+import animeware.hud.mod.Mods.BPSMod;
+import animeware.hud.mod.Mods.Biome;
+import animeware.hud.mod.Mods.BlockOverlay;
+import animeware.hud.mod.Mods.CPSMod;
+import animeware.hud.mod.Mods.FPSMod;
+import animeware.hud.mod.Mods.HitColor;
+import animeware.hud.mod.Mods.ItemPhysics;
+import animeware.hud.mod.Mods.Keystrokes;
+import animeware.hud.mod.Mods.MemUsage;
+import animeware.hud.mod.Mods.MinimalBobbing;
+import animeware.hud.mod.Mods.Miniplayer;
+import animeware.hud.mod.Mods.ModArrows;
+import animeware.hud.mod.Mods.ModDirection;
+import animeware.hud.mod.Mods.ModHorseStats;
+import animeware.hud.mod.Mods.ModMLDGHelper;
+import animeware.hud.mod.Mods.ModParticles;
+import animeware.hud.mod.Mods.MoreParticles;
+import animeware.hud.mod.Mods.Motionblurmodule;
+import animeware.hud.mod.Mods.NotificationsModule;
+import animeware.hud.mod.Mods.PackDisplay;
+import animeware.hud.mod.Mods.Ping;
+import animeware.hud.mod.Mods.PlayerHead;
+import animeware.hud.mod.Mods.PotionStatus;
+import animeware.hud.mod.Mods.ReachDisplayMod;
+import animeware.hud.mod.Mods.ScrollZoom;
+import animeware.hud.mod.Mods.ServerIP;
+import animeware.hud.mod.Mods.SmallSword;
+import animeware.hud.mod.Mods.SwordSpin;
+import animeware.hud.mod.Mods.TNTTimer;
+import animeware.hud.mod.Mods.TargetHUD;
+import animeware.hud.mod.Mods.TimeChanger;
+import animeware.hud.mod.Mods.TimeMod;
+import animeware.hud.mod.Mods.ToggleSprint3;
+import animeware.hud.mod.Mods.Watermark;
+import animeware.hud.mod.Mods.WindowedFullscreenMod;
+import animeware.hud.mod.Mods.XYZMod;
+import animeware.ui.themes.AstolfoButtons;
+import animeware.ui.themes.GUILight;
+import animeware.ui.themes.color.ColorScheme;
+import net.minecraft.client.Minecraft;
+
+public class HudManager {
+
+ public ArrayList hudMods = new ArrayList<>();
+
+ //public ArrayList hudMods;
+
+ //public ToggleSprint togglesprint;
+ public NotificationsModule notifs;
+
+ public FPSMod fps;
+
+
+ public TargetHUD thud;
+
+
+ public Keystrokes keystrokes;
+
+
+ //public MotionBlur motionblur;
+
+ //public Watermark watermark;
+
+ //public ToggleSprint togglesprint;
+
+ public CPSMod cps;
+
+
+
+ public static Freelook freelook;
+
+ //public static Animeware animeware;
+
+ public boolean TNTTimer;
+
+ public PotionStatus potionStat;
+
+
+ public Miniplayer lilplayer;
+
+ public XYZMod xyz;
+
+
+ public BPSMod bps;
+
+
+ public Ping ping;
+
+
+ //public Fullbright fb;
+
+ public Biome biome;
+
+
+ public PackDisplay pd;
+
+
+ public ServerIP sip;
+
+
+ //public AnimewareText text;
+
+ public TimeMod time;
+
+
+ public ModArrows arrows;
+
+ public ArmorStatus Armorstat;
+
+
+ //public DynamicFOV fov;
+ //public DirectionMod direction;
+
+ public ToggleSprint3 ts;
+
+
+ public ReachDisplayMod reachDisp;
+
+
+ public ModDirection direction;
+
+
+
+ public ModParticles particles;
+
+ public ModMLDGHelper mldg;
+
+ public PlayerHead head;
+
+ public MemUsage mem;
+
+ public ItemPhysics iphys;
+
+ public BlockOverlay bo;
+
+
+ public TNTTimer tnt;
+
+ public ScrollZoom sz;
+
+ public MoreParticles mp;
+
+ public SmallSword smallsword;
+
+ public SwordSpin swordspin;
+
+ public Watermark watermark;
+
+ public TimeChanger timeChanger;
+
+
+ public HitColor hit;
+
+ public ModHorseStats horseStat;
+
+ public GUILight guiLight;
+
+ public AstolfoButtons astolfobtn;
+
+ public ColorScheme colorscheme;
+
+ public Motionblurmodule mbm;
+
+ public MinimalBobbing mBobbing;
+
+ public WindowedFullscreenMod WindowedFullscreen;
+
+ //public ModPusula dir2;
+
+ //public Freelook freelook;
+
+ //public static boolean OldAnimations;
+ //public DirectionMod dirMod;
+
+ public HudManager() {
+ hudMods = new ArrayList<>();
+
+ //hudMods.add(togglesprint = new ToggleSprint());
+ hudMods.add(notifs = new NotificationsModule());
+
+ hudMods.add(fps = new FPSMod());
+
+
+ hudMods.add(thud = new TargetHUD());
+
+
+ hudMods.add(keystrokes = new Keystrokes());
+
+
+ //hudMods.add(motionblur = new MotionBlur());
+ //hudMods.add(watermark = new Watermark());
+ //hudMods.add(togglesprint = new ToggleSprint());
+
+ hudMods.add(cps = new CPSMod());
+
+
+ //hudMods.add(tnt = new TNTTimer());
+
+ hudMods.add(potionStat = new PotionStatus());
+
+
+ hudMods.add(lilplayer = new Miniplayer());
+
+ hudMods.add(xyz = new XYZMod());
+
+
+ hudMods.add(bps = new BPSMod());
+
+
+ hudMods.add(ping = new Ping());
+
+
+ //hudMods.add(fb = new Fullbright());
+
+ hudMods.add(biome = new Biome());
+
+
+ hudMods.add(pd = new PackDisplay());
+
+
+ hudMods.add(sip = new ServerIP());
+
+
+ hudMods.add(time = new TimeMod());
+
+
+ hudMods.add(arrows = new ModArrows());
+
+ hudMods.add(Armorstat = new ArmorStatus());
+
+
+ //hudMods.add(bfs = new BorderlessFullscreen());
+
+ //hudMods.add(fov = new DynamicFOV());
+
+ //hudMods.add(text = new AnimewareText(null, 0, 0));
+
+ hudMods.add(reachDisp = new ReachDisplayMod());
+
+
+ hudMods.add(ts = new ToggleSprint3());
+
+ //hudMods.add(clock = new Clock());
+ //hudMods.add(dirMod = new DirectionMod());
+
+ hudMods.add(freelook = new Freelook());
+
+ hudMods.add(direction = new ModDirection());
+
+
+ hudMods.add(particles = new ModParticles());
+
+ hudMods.add(mldg = new ModMLDGHelper());
+
+ hudMods.add(head = new PlayerHead());
+
+ hudMods.add(mem = new MemUsage());
+
+ hudMods.add(iphys = new ItemPhysics());
+
+ hudMods.add(bo = new BlockOverlay());
+
+
+ hudMods.add(tnt = new TNTTimer());
+
+ hudMods.add(sz = new ScrollZoom());
+
+ hudMods.add(mp = new MoreParticles());
+
+ hudMods.add(smallsword = new SmallSword());
+
+ hudMods.add(swordspin = new SwordSpin());
+
+ hudMods.add(watermark = new Watermark());
+
+ hudMods.add(timeChanger = new TimeChanger());
+
+ hudMods.add(mBobbing = new MinimalBobbing());
+
+
+ hudMods.add(hit = new HitColor());
+
+ hudMods.add(horseStat = new ModHorseStats());
+
+ hudMods.add(guiLight = new GUILight());
+
+ hudMods.add(astolfobtn = new AstolfoButtons());
+
+ hudMods.add(colorscheme = new ColorScheme());
+
+ hudMods.add(WindowedFullscreen = new WindowedFullscreenMod());
+
+
+
+ freelook = new Freelook();
+ //api.register(freelook);
+
+ }
+ /*public void register(HUDManager api) {
+ freelook = new Freelook();
+ api.register(freelook);
+ hudMods.add(freelook);
+ }*/
+ public static Freelook getFreelook() {
+ return freelook;
+ }
+
+
+
+
+ public void renderMods() {
+ for(HudMod m : hudMods) {
+ if(m.isEnabled() && !Minecraft.getMinecraft().gameSettings.showDebugInfo) {
+ m.draw();
+ }
+ }
+
+ }
+
+ public HudMod getModule(String name) {
+ for (HudMod m : hudMods) {
+ if (m.name.equalsIgnoreCase(name)) {
+ return m;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/HudMod.java b/src/minecraft/animeware/hud/mod/HudMod.java
new file mode 100644
index 0000000..d54d822
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/HudMod.java
@@ -0,0 +1,221 @@
+package animeware.hud.mod;
+
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import animeware.NightSky;
+import animeware.event.EventManager;
+import animeware.hud.DraggableComponent;
+import animeware.util.settings.ModeSetting;
+//import animeware.util.backend.FileManager;
+import animeware.util.settings.Setting;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiLabel;
+import net.minecraft.util.ResourceLocation;
+
+public class HudMod {
+
+ public Minecraft mc = Minecraft.getMinecraft();
+ public FontRenderer fr = mc.fontRendererObj;
+ protected List buttonList = Lists.newArrayList();
+ protected List labelList = Lists.newArrayList();
+
+ public List settings = new ArrayList();
+
+ public static boolean expanded;
+ public int lenght = 10;
+ public String name;
+ public String description;
+ public ResourceLocation icon;
+ //public boolean isEnabled = false;
+ public int key;
+ public boolean enabled = true;
+ public DraggableComponent drag;
+ HudMod m;
+
+
+ public int index;
+
+ public int x, y;
+
+ public HudMod(String name, String description, ResourceLocation icon, int x, int y) {
+ this.name = name;
+ this.description = description;
+ this.icon = icon;
+
+ try {
+ this.x = ((Integer)NightSky.INSTANCE.config.config.get(String.valueOf(name.toLowerCase()) + " x")).intValue();
+ this.y = ((Integer)NightSky.INSTANCE.config.config.get(String.valueOf(name.toLowerCase()) + " y")).intValue();
+ setEnabled(((Boolean)NightSky.INSTANCE.config.config.get(String.valueOf(name.toLowerCase()) + " enabled")));
+ } catch (NullPointerException e) {
+ //e.printStackTrace();
+ if(!(name == "HitColor" || name == "BlockOverlay")) {
+ System.out.println("ModConfig Load Failed - HudMod = " + name);
+ }
+ if(name.equals("ToggleSprint")) {
+ e.printStackTrace();
+ }
+ this.x = x;
+ this.y = y;
+ this.enabled = false;
+ }
+
+
+ //settings = new ArrayList<>();
+ drag = new DraggableComponent(this.x, this.y, getWidth(), getHeight(), new Color(0, 0, 0, 0).getRGB());
+ }
+
+
+ public int getWidth() {
+
+ return 0;
+
+ }
+
+
+
+ public String getName() {
+ return name;
+ }
+ public String getSetName() {
+ return settings.get(index).toString();
+ }
+
+ public int getHeight() {
+ return 0;
+
+ }
+ public ResourceLocation getIcon() {
+ return icon;
+ }
+
+ public void draw() {
+
+ }
+
+ public void renderDummy(int mouseX, int mouseY) {
+ drag.draw(mouseX, mouseY);
+
+ }
+ public void setEnabledSilent(boolean enabled) {
+ this.enabled = enabled;
+
+ if (enabled)
+ {
+ NightSky.INSTANCE.eventManager.register(this);
+ }
+
+ if (!enabled)
+ {
+ NightSky.INSTANCE.eventManager.unregister(this);
+ }
+ }
+ public void setKey(int keybind) {
+ this.key = keybind;
+ }
+
+ public int getX() {
+ return drag.getxPosition();
+ }
+
+ public int getY() {
+ return drag.getyPosition();
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ if(enabled) {
+ onEnable();
+ }
+ else {
+ onDisable();
+ }
+ }
+ public void setDisabled(boolean enabled) {
+ this.enabled = !enabled;
+ if(!enabled) {
+ onDisable();
+ }
+ else {
+ onEnable();
+ }
+ }
+
+ public void onEnable() {
+ EventManager.register(this);
+
+ }
+
+ public void toggle() {
+ this.setEnabled(!enabled);
+
+ }
+ public void expand() {
+ if(expanded) {
+ expanded = false;
+ } else {
+ expanded = true;
+ }
+
+ }
+ public void deexpand() {
+ if(expanded) {
+ expanded = true;
+ } else {
+ expanded = false;
+ }
+
+ }
+
+ public void addSettings(Setting... settings) {
+ this.settings.addAll(Arrays.asList(settings));
+ }
+
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+ public boolean isDisabled() {
+ return !enabled;
+ }
+
+
+ public void onDisable() {
+ NightSky.INSTANCE.eventManager.unregister(this);
+
+ }
+ public void drawScreen(int mouseX, int mouseY, float partialTicks)
+ {
+ for (int i = 0; i < this.buttonList.size(); ++i)
+ {
+ ((GuiButton)this.buttonList.get(i)).drawButton(this.mc, mouseX, mouseY);
+ }
+
+ for (int j = 0; j < this.labelList.size(); ++j)
+ {
+ ((GuiLabel)this.labelList.get(j)).drawLabel(this.mc, mouseX, mouseY);
+ }
+ }
+ //@Override
+ public String getToggled() {
+ return "Toggled";
+ }
+ public void Notif() {
+
+ }
+
+
+}
+
+
+
+
+
+
+
diff --git a/src/minecraft/animeware/hud/mod/IConfigExchange.java b/src/minecraft/animeware/hud/mod/IConfigExchange.java
new file mode 100644
index 0000000..0a2a21e
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/IConfigExchange.java
@@ -0,0 +1,26 @@
+package animeware.hud.mod;
+
+import animeware.hud.ScreenPosition;
+
+public interface IConfigExchange {
+
+ /**
+ * Is called for each HUD when the screen is closed.
+ *
+ * @param pos Provided by the API. The chosen position for the HUD.
+ * Preferably save the values in a configuration file.
+ */
+ public abstract void save(ScreenPosition pos);
+
+ /**
+ * Creates a new ScreenPosition object based on relative coordinates.
+ * From 0 to 1. Example: 0.3 being 30% of the screen size.
+ *
+ * @return The initial ScreenPosition position.
+ * This is where the HUD will be rendered when opening a screen.
+ * Preferably load the values from a configuration file.
+ * Can be null.
+ */
+ public abstract ScreenPosition load();
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/ArmorStatus.java b/src/minecraft/animeware/hud/mod/Mods/ArmorStatus.java
new file mode 100644
index 0000000..fe74e31
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/ArmorStatus.java
@@ -0,0 +1,105 @@
+package animeware.hud.mod.Mods;
+
+import java.text.DecimalFormat;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.hud.mod.HudMod;
+import animeware.util.ChromaString;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.client.renderer.RenderHelper;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ResourceLocation;
+
+public class ArmorStatus extends HudMod {
+
+ public String damagef;
+ private int decimals;
+
+ public ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");
+
+ public ArmorStatus() {
+ super("ArmorStatus", "Status of your armor", new ResourceLocation("Animeware/icons/armorstatus.png"), 900, 140);
+ this.addSettings(color);
+
+ }
+
+ @Override
+ public void draw() {
+
+ for (int i = 0; i < mc.thePlayer.inventory.armorInventory.length; i++) {
+ ItemStack itemStack = mc.thePlayer.inventory.armorInventory[i];
+ renderItemStack(i, itemStack);
+ renderItemStack(-1, mc.thePlayer.getCurrentEquippedItem());
+ }
+ super.draw();
+ }
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+
+ renderItemStack(3, new ItemStack(Items.diamond_helmet));
+ renderItemStack(2, new ItemStack(Items.diamond_chestplate));
+ renderItemStack(1, new ItemStack(Items.diamond_leggings));
+ renderItemStack(0, new ItemStack(Items.diamond_boots));
+ renderItemStack(-1, new ItemStack(Items.golden_sword));
+
+ super.renderDummy(mouseX, mouseY);
+ }
+
+ private void renderItemStack( int i, ItemStack is) {
+
+ if (is == null) {
+ return;
+ }
+
+ GL11.glPushMatrix();
+ int yAdd = (-16 * i) + 48;
+
+ if (is.getItem().isDamageable()) {
+ double damage = ((is.getMaxDamage() - is.getItemDamage()) / (double) is.getMaxDamage()) * 100;
+ damagef = this.getFormatter().format(damage);
+ //fr.drawString(String.format("%.2f%%", damage), getX() + 20, getY() + yAdd + 5);
+ if(color.getMode().equals("Blue")) {
+ fr.drawStringWithShadow("1" + damagef + "%", getX() + 20, getY() + yAdd + 5, -1);
+ } else if(color.getMode().equals("Cyan")) {
+ fr.drawStringWithShadow("b" + damagef + "%", getX() + 20, getY() + yAdd + 5, -1);
+ } else if(color.getMode().equals("Red")) {
+ fr.drawStringWithShadow("4" + damagef + "%", getX() + 20, getY() + yAdd + 5, -1);
+ } else if(color.getMode().equals("Purple")) {
+ fr.drawStringWithShadow("5" + damagef + "%", getX() + 20, getY() + yAdd + 5, -1);
+ } else if(color.getMode().equals("Chroma")) {
+ ChromaString.drawChromaString("" + damagef + "%", getX() + 20, getY() + yAdd + 5, -1);
+ } else if(color.getMode().equals("White")) {
+ fr.drawStringWithShadow("" + damagef + "%", getX() + 20, getY() + yAdd + 5, -1);
+ }
+
+ }
+
+ RenderHelper.enableGUIStandardItemLighting();
+ mc.getRenderItem().renderItemAndEffectIntoGUI(is, getX(), getY() + yAdd);
+
+ GL11.glPopMatrix();
+ }
+
+ @Override
+ public int getWidth() {
+ return fr.getStringWidth(name);
+ }
+
+ @Override
+ public int getHeight() {
+ return fr.FONT_HEIGHT + 70;
+ }
+ private DecimalFormat getFormatter()
+ {
+ StringBuilder format = new StringBuilder("0");
+ for (int i = 0; this.decimals > i; i++)
+ {
+ format.append('0');
+ }
+ return new DecimalFormat(format.toString());
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/BPSMod.java b/src/minecraft/animeware/hud/mod/Mods/BPSMod.java
new file mode 100644
index 0000000..33de5be
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/BPSMod.java
@@ -0,0 +1,90 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+import java.text.DecimalFormat;
+
+import animeware.hud.mod.HudMod;
+import animeware.util.ChromaString;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+
+public class BPSMod extends HudMod{
+
+ static Minecraft mc = Minecraft.getMinecraft();
+ private int decimals;
+
+ public ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");;
+
+ public BPSMod() {
+ super("BPSMod", "Movement speed", new ResourceLocation("Animeware/icons/bps.png"), 0, 31);
+ this.addSettings(color);
+ }
+
+ @Override
+ public void draw() {
+ float rat = Minecraft.getMinecraft().timer.getTicksPerSecond() * Minecraft.getMinecraft().timer.timerSpeed;
+ //double bps = mc.thePlayer.getDistance(mc.thePlayer.lastTickPosX, mc.thePlayer.posY, mc.thePlayer.lastTickPosZ) * rat;
+ double speed = Math.sqrt(mc.thePlayer.motionX * mc.thePlayer.motionX + mc.thePlayer.motionZ * mc.thePlayer.motionZ)*rat;
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ if(color.getMode().equals("Blue")) {
+ mc.fontRendererObj.drawStringWithShadow("8[1BPS:f" + this.getFormatter().format(speed) + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Cyan")) {
+ mc.fontRendererObj.drawStringWithShadow("8[bBPS:f" + this.getFormatter().format(speed) + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Red")) {
+ mc.fontRendererObj.drawStringWithShadow("8[4BPS:f" + this.getFormatter().format(speed) + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Purple")) {
+ mc.fontRendererObj.drawStringWithShadow("8[5BPS:f" + this.getFormatter().format(speed) + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Chroma")) {
+ ChromaString.drawChromaString("[BPS:" + this.getFormatter().format(speed) + "]", getX(), getY(), -1);
+ } else if(color.getMode().equals("White")) {
+ //fr.drawStringWithShadow("[BPS:" + this.getFormatter().format(speed) + "]", getX(), getY(), -1);
+ fr.drawStringWithShadow("8[fBPS:f" + this.getFormatter().format(speed) + "8]", getX(), getY(), -1);
+ }
+ //mc.fontRendererObj.drawStringWithShadow("8[fBPS:f" + this.getFormatter().format(speed) + "8]", getX(), getY(), -1);
+ //mc.fontRendererObj.drawStringWithShadow("8[fBPS:f" + mc.thePlayer.capabilities.getWalkSpeed() + "8]", getX(), getY(), -1);
+ super.draw();
+ }
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ if(color.getMode().equals("Blue")) {
+ mc.fontRendererObj.drawStringWithShadow("8[1BPS:f" + "0.00" + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Cyan")) {
+ mc.fontRendererObj.drawStringWithShadow("8[bBPS:f" + "0.00" + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Red")) {
+ mc.fontRendererObj.drawStringWithShadow("8[4BPS:f" + "0.00" + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Purple")) {
+ mc.fontRendererObj.drawStringWithShadow("8[5BPS:f" + "0.00" + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Chroma")) {
+ ChromaString.drawChromaString("[BPS:" + "0.00" + "]", getX(), getY(), -1);
+ } else if(color.getMode().equals("White")) {
+ fr.drawStringWithShadow("8[fBPS:f" + "0.00" + "8]", getX(), getY(), -1);
+ }
+ //fr.drawStringWithShadow("8[fBPS:f" + "0.00" + "8]", getX(), getY(), -1);
+
+ super.renderDummy(mouseX, mouseY);
+ }
+
+ @Override
+ public int getWidth() {
+ return fr.getStringWidth("8[fBPS:f0.008]") + 1;
+ }
+
+ @Override
+ public int getHeight() {
+ return fr.FONT_HEIGHT;
+ }
+ private DecimalFormat getFormatter()
+ {
+ StringBuilder format = new StringBuilder("0.00");
+ for (int i = 100; this.decimals > i; i++)
+ {
+ format.append('0');
+ }
+ return new DecimalFormat(format.toString());
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/Biome.java b/src/minecraft/animeware/hud/mod/Mods/Biome.java
new file mode 100644
index 0000000..9a5159e
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/Biome.java
@@ -0,0 +1,60 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+
+import animeware.hud.mod.HudMod;
+import animeware.util.ChromaString;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+
+public class Biome extends HudMod{
+
+ public ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");
+
+ public Biome() {
+ super("Biome", "Displays what biome you are in", new ResourceLocation("Animeware/icons/xyz.png"), 0, 51);
+ this.addSettings(color);
+ }
+
+ @Override
+ public void draw() {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ if(color.getMode().equals("Blue")) {
+ fr.drawStringWithShadow("8[1Biome:f " + mc.theWorld.getBiomeGenForCoords(mc.thePlayer.getPosition()).biomeName + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Cyan")) {
+ fr.drawStringWithShadow("8[bBiome:f " + mc.theWorld.getBiomeGenForCoords(mc.thePlayer.getPosition()).biomeName + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Red")) {
+ fr.drawStringWithShadow("8[4Biome:f " + mc.theWorld.getBiomeGenForCoords(mc.thePlayer.getPosition()).biomeName + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Purple")) {
+ fr.drawStringWithShadow("8[5Biome:f " + mc.theWorld.getBiomeGenForCoords(mc.thePlayer.getPosition()).biomeName + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Chroma")) {
+ ChromaString.drawChromaString("[Biome: " + mc.theWorld.getBiomeGenForCoords(mc.thePlayer.getPosition()).biomeName + "]", getX(), getY(), -1);
+ } else if(color.getMode().equals("White")) {
+ fr.drawStringWithShadow("8[fBiome:f " + mc.theWorld.getBiomeGenForCoords(mc.thePlayer.getPosition()).biomeName + "8]", getX(), getY(), -1);
+ }
+
+ //fr.drawStringWithShadow("8[fBiome:f " + mc.theWorld.getBiomeGenForCoords(mc.thePlayer.getPosition()).biomeName + "8]", getX(), getY(), -1);
+ super.draw();
+ }
+
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ fr.drawStringWithShadow("8[fBiome:f " + "Taiga" + "8]", getX(), getY(), -1);
+
+ super.renderDummy(mouseX, mouseY);
+ }
+
+ @Override
+ public int getWidth() {
+ return fr.getStringWidth("8[fBiome:f " + "BiomeBio" + "8]");
+ }
+
+ @Override
+ public int getHeight() {
+ return fr.FONT_HEIGHT;
+ }
+
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/hud/mod/Mods/BlockOverlay.java b/src/minecraft/animeware/hud/mod/Mods/BlockOverlay.java
new file mode 100644
index 0000000..0319339
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/BlockOverlay.java
@@ -0,0 +1,72 @@
+package animeware.hud.mod.Mods;
+
+import animeware.cosmetic.Booleans;
+import animeware.hud.mod.HudMod;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.util.ResourceLocation;
+
+public class BlockOverlay extends HudMod {
+
+ public ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");
+
+ public BlockOverlay() {
+ super("BlockOverlay", "Shows overlay over blocks", new ResourceLocation("Animeware/icons/blockoverlay.png"), 0, 0);
+ this.addSettings(color);
+ }
+ @Override
+ public void onEnable() {
+ if(color.getMode().equals("Blue")) {
+ Booleans.BlockOverlayBlue = true;
+ //fr.drawStringWithShadow("8[1FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Cyan")) {
+ Booleans.BlockOverlayCyan = true;
+ //fr.drawStringWithShadow("8[bFPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Red")) {
+ Booleans.BlockOverlayRed = true;
+ //fr.drawStringWithShadow("8[4FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Purple")) {
+ Booleans.BlockOverlayPurple = true;
+ //fr.drawStringWithShadow("8[5FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Chroma")) {
+ Booleans.BlockOverlayChroma = true;
+ //ChromaString.drawChromaString("[FPS:" + mc.getDebugFPS() + "]", getX(), getY(), -1);
+ } else if(color.getMode().equals("White")) {
+ Booleans.BlockOverlayWhite = true;
+ //fr.drawStringWithShadow("8[fFPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ }
+ //NightSky.BlockOverlayWhite = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ if(color.getMode().equals("Blue")) {
+ Booleans.BlockOverlayBlue = false;
+ //fr.drawStringWithShadow("8[1FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Cyan")) {
+ Booleans.BlockOverlayCyan = false;
+ //fr.drawStringWithShadow("8[bFPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Red")) {
+ Booleans.BlockOverlayRed = false;
+ //fr.drawStringWithShadow("8[4FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Purple")) {
+ Booleans.BlockOverlayPurple = false;
+ //fr.drawStringWithShadow("8[5FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Chroma")) {
+ Booleans.BlockOverlayChroma = false;
+ //ChromaString.drawChromaString("[FPS:" + mc.getDebugFPS() + "]", getX(), getY(), -1);
+ } else if(color.getMode().equals("White")) {
+ Booleans.BlockOverlayWhite = false;
+ //fr.drawStringWithShadow("8[fFPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ }//super.onDisable();
+ }
+ @Override
+ public int getWidth() {
+ return 0;
+ }
+
+ @Override
+ public int getHeight() {
+ return 0;
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/CPSMod.java b/src/minecraft/animeware/hud/mod/Mods/CPSMod.java
new file mode 100644
index 0000000..1e31be2
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/CPSMod.java
@@ -0,0 +1,163 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.lwjgl.input.Mouse;
+
+import animeware.DiscordRP;
+import animeware.hud.DraggableComponent;
+import animeware.hud.mod.HudMod;
+import animeware.util.ChromaString;
+import animeware.util.misc.WebhookUtil;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+
+public class CPSMod extends HudMod {
+
+ public ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");;
+
+ public CPSMod() {
+ super("CPS", "Displays cps", new ResourceLocation("Animeware/icons/cps.png"), 0, 11);
+ this.addSettings(color);
+ }
+
+ @Override
+ public int getHeight() {
+ return fr.FONT_HEIGHT;
+ }
+
+ @Override
+ public int getWidth() {
+ return 45;
+ }
+
+ private List clicks = new ArrayList();
+ private boolean wasPressed;
+ private long lastPress;
+
+ private List clicks2 = new ArrayList();
+ private boolean wasPressed2;
+ private long lastPressed2;
+
+ private int getCPS() {
+ final long time = System.currentTimeMillis();
+ this.clicks.removeIf(aLong -> aLong + 1000L < time);
+ return this.clicks.size();
+ }
+
+ private int getCPS2() {
+ final long time2 = System.currentTimeMillis();
+ this.clicks2.removeIf(aLong2 -> aLong2 + 1000 < time2);
+ return this.clicks2.size();
+ }
+
+ public void render(DraggableComponent pos) {
+ final boolean lpressed = Mouse.isButtonDown(0);
+ final boolean rpressed = Mouse.isButtonDown(1);
+
+ if(lpressed != this.wasPressed) {
+ this.lastPress = System.currentTimeMillis() + 10;
+ this.wasPressed = lpressed;
+ if(lpressed) {
+ this.clicks.add(this.lastPress);
+ }
+ }
+
+ if(rpressed != this.wasPressed2) {
+ this.lastPressed2 = System.currentTimeMillis() + 10;
+ this.wasPressed2 = rpressed;
+ if(rpressed) {
+ this.clicks2.add(this.lastPressed2);
+ }
+ }
+ final int cps = this.getCPS();
+ final int cpsr = this.getCPS2();
+ fr.drawStringWithShadow("8CPSf: " + cps + " : " + cpsr, getX(), getY(), -1);
+
+ }
+
+ @Override
+ public void draw() {
+ final boolean lpressed = Mouse.isButtonDown(0);
+ final boolean rpressed = Mouse.isButtonDown(1);
+
+ if(lpressed != this.wasPressed) {
+ this.lastPress = System.currentTimeMillis() + 10;
+ this.wasPressed = lpressed;
+ if(lpressed) {
+ this.clicks.add(this.lastPress);
+ }
+ }
+
+ if(rpressed != this.wasPressed2) {
+ this.lastPressed2 = System.currentTimeMillis() + 10;
+ this.wasPressed2 = rpressed;
+ if(rpressed) {
+ this.clicks2.add(this.lastPressed2);
+ }
+ }
+ final int cps = this.getCPS();
+ final int cpsr = this.getCPS2();
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ if(color.getMode().equals("Blue")) {
+ fr.drawStringWithShadow("1CPSf: " + cps + " : " + cpsr, getX(), getY(), -1);
+ } else if(color.getMode().equals("Cyan")) {
+ fr.drawStringWithShadow("bCPSf: " + cps + " : " + cpsr, getX(), getY(), -1);
+ } else if(color.getMode().equals("Red")) {
+ fr.drawStringWithShadow("4CPSf: " + cps + " : " + cpsr, getX(), getY(), -1);
+ } else if(color.getMode().equals("Purple")) {
+ fr.drawStringWithShadow("5CPSf: " + cps + " : " + cpsr, getX(), getY(), -1);
+ } else if(color.getMode().equals("Chroma")) {
+ ChromaString.drawChromaString("CPS: " + cps + " : " + cpsr, getX(), getY(), -1);
+ } else if(color.getMode().equals("White")) {
+ fr.drawStringWithShadow("8[fCPS:f" + cps + ":" + cpsr + "8]", getX(), getY(), -1);
+ }
+ //fr.drawStringWithShadow("8[fCPS:f" + cps + ":" + cpsr + "8]", getX(), getY(), -1); //8[fFPS:f" + mc.getDebugFPS() + "8]
+
+
+
+ }
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ final boolean lpressed = Mouse.isButtonDown(0);
+ final boolean rpressed = Mouse.isButtonDown(1);
+
+ if(lpressed != this.wasPressed) {
+ this.lastPress = System.currentTimeMillis() + 10;
+ this.wasPressed = lpressed;
+ if(lpressed) {
+ this.clicks.add(this.lastPress);
+ }
+ }
+
+ if(rpressed != this.wasPressed2) {
+ this.lastPressed2 = System.currentTimeMillis() + 10;
+ this.wasPressed2 = rpressed;
+ if(rpressed) {
+ this.clicks2.add(this.lastPressed2);
+ }
+ }
+ final int cps = this.getCPS();
+ final int cpsr = this.getCPS2();
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ if(color.getMode().equals("Blue")) {
+ fr.drawStringWithShadow("1CPSf: " + cps + " : " + cpsr, getX(), getY(), -1);
+ } else if(color.getMode().equals("Cyan")) {
+ fr.drawStringWithShadow("bCPSf: " + cps + " : " + cpsr, getX(), getY(), -1);
+ } else if(color.getMode().equals("Red")) {
+ fr.drawStringWithShadow("4CPSf: " + cps + " : " + cpsr, getX(), getY(), -1);
+ } else if(color.getMode().equals("Purple")) {
+ fr.drawStringWithShadow("5CPSf: " + cps + " : " + cpsr, getX(), getY(), -1);
+ } else if(color.getMode().equals("Chroma")) {
+ ChromaString.drawChromaString("CPS: " + cps + " : " + cpsr, getX(), getY(), -1);
+ } else if(color.getMode().equals("White")) {
+ fr.drawStringWithShadow("8[fCPS:f" + cps + ":" + cpsr + "8]", getX(), getY(), -1);
+ }
+ super.renderDummy(mouseX, mouseY);
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/hud/mod/Mods/FPSMod.java b/src/minecraft/animeware/hud/mod/Mods/FPSMod.java
new file mode 100644
index 0000000..574fb1f
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/FPSMod.java
@@ -0,0 +1,101 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+
+import animeware.hud.mod.HudMod;
+import animeware.util.ChromaString;
+import animeware.util.settings.BooleanSetting;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+
+public class FPSMod extends HudMod {
+
+ //public ModeSetting Color = new ModeSetting("Blue", "Cyan", "Purple", "Red");
+ //public BooleanSetting White = new BooleanSetting("White", true);
+ //public ModeSetting Color = new ModeSetting("Color", "White", "Blue", "Red");
+
+ //public BooleanSetting blue = new BooleanSetting("Blue", false);
+ //public BooleanSetting cyan = new BooleanSetting("Cyan", false);
+ //public BooleanSetting red = new BooleanSetting("Red", false);
+ //public BooleanSetting purple = new BooleanSetting("Purple", false);
+ //public BooleanSetting chroma = new BooleanSetting("Chroma", false);
+ public ModeSetting color1 = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");;
+ BooleanSetting invertXSetting = new BooleanSetting(90.0f, 100.0f, "Invert X");
+
+ private HudMod hudMod;
+
+ public FPSMod() {
+ super("FPS", "Displays fps", new ResourceLocation("Animeware/icons/fps.png"), 0, 1);
+ //this.addSettings(Blue);
+ //this.addSettings(blue, cyan, red, purple, chroma);
+ //this.addSettings(Cyan);
+ //this.addSettings(Red);
+ //this.addSettings(Purple);
+ //this.addSettings(Chroma);
+ this.addSettings(color1);
+ this.invertXSetting.setEnabled(false);
+ }
+
+ @Override
+ public void draw() {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ //if(Blue.isEnabled()) {
+ //fr.drawStringWithShadow("8[1FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ //} else {
+
+
+ if(color1.getMode().equals("Blue")) {
+ fr.drawStringWithShadow("8[1FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color1.getMode().equals("Cyan")) {
+ fr.drawStringWithShadow("8[bFPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color1.getMode().equals("Red")) {
+ fr.drawStringWithShadow("8[4FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color1.getMode().equals("Purple")) {
+ fr.drawStringWithShadow("8[5FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color1.getMode().equals("Chroma")) {
+ ChromaString.drawChromaString("[FPS:" + mc.getDebugFPS() + "]", getX(), getY(), -1);
+ } else if(color1.getMode().equals("White")) {
+ fr.drawStringWithShadow("8[fFPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ }
+
+ //ChromaString.drawChromaString("FPS:" + mc.getDebugFPS() + "]", getX(), getY(), -1);
+ //}
+ //super.draw();
+ }
+
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ if(color1.getMode().equals("Blue")) {
+ fr.drawStringWithShadow("8[1FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color1.getMode().equals("Cyan")) {
+ fr.drawStringWithShadow("8[bFPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color1.getMode().equals("Red")) {
+ fr.drawStringWithShadow("8[4FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color1.getMode().equals("Purple")) {
+ fr.drawStringWithShadow("8[5FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color1.getMode().equals("Chroma")) {
+ ChromaString.drawChromaString("[FPS:" + mc.getDebugFPS() + "]", getX(), getY(), -1);
+ } else if(color1.getMode().equals("White")) {
+ fr.drawStringWithShadow("8[fFPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ }
+ //this.drawHollowRect(hudMod.getX(), hudMod.getY(), hudMod.getX() + hudMod.getWidth(), hudMod.getY() + hudMod.getHeight(), 0x33FFFFFF);
+
+ super.renderDummy(mouseX, mouseY);
+ }
+
+ @Override
+ public int getWidth() {
+ return fr.getStringWidth("8[fFPS:f" + mc.getDebugFPS() + "8]");
+ }
+
+ @Override
+ public int getHeight() {
+ return fr.FONT_HEIGHT;
+ }
+
+
+}
+
diff --git a/src/minecraft/animeware/hud/mod/Mods/HitColor.java b/src/minecraft/animeware/hud/mod/Mods/HitColor.java
new file mode 100644
index 0000000..1b9c47c
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/HitColor.java
@@ -0,0 +1,53 @@
+package animeware.hud.mod.Mods;
+
+import animeware.cosmetic.Booleans;
+import animeware.hud.mod.HudMod;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.util.ResourceLocation;
+
+public class HitColor extends HudMod {
+
+ public ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");;
+
+ public HitColor() {
+ super("HitColor", "Changes hit color", new ResourceLocation("Animeware/icons/placeholder.png"), 0, 0);
+ this.addSettings(color);
+ }
+ @Override
+ public void onEnable() {
+ if(color.getMode().equals("Blue")) {
+ Booleans.HitColorBlue = true;
+ } else if(color.getMode().equals("Cyan")) {
+ Booleans.HitColorCyan = true;
+ } else if(color.getMode().equals("Red")) {
+ Booleans.HitColorRed = true;
+ } else if(color.getMode().equals("Purple")) {
+ Booleans.HitColorPurple = true;
+ } else if(color.getMode().equals("Chroma")) {
+ Booleans.HitColorChroma = true;
+ } else if(color.getMode().equals("White")) {
+ Booleans.HitColor = true;
+ }
+
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ if(color.getMode().equals("Blue")) {
+ Booleans.HitColorBlue = false;
+ } else if(color.getMode().equals("Cyan")) {
+ Booleans.HitColorCyan = false;
+ } else if(color.getMode().equals("Red")) {
+ Booleans.HitColorRed = false;
+ } else if(color.getMode().equals("Purple")) {
+ Booleans.HitColorPurple = false;
+ } else if(color.getMode().equals("Chroma")) {
+ Booleans.HitColorChroma = false;
+ } else if(color.getMode().equals("White")) {
+ Booleans.HitColor = false;
+ }
+
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/ItemPhysics.java b/src/minecraft/animeware/hud/mod/Mods/ItemPhysics.java
new file mode 100644
index 0000000..2c04ddb
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/ItemPhysics.java
@@ -0,0 +1,32 @@
+package animeware.hud.mod.Mods;
+
+import animeware.cosmetic.Booleans;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class ItemPhysics extends HudMod {
+
+ public ItemPhysics() {
+ super("ItemPhysics", "Adds physics to your items", new ResourceLocation("Animeware/icons/itemphysics.png"), 0, 0);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.itemphys = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.itemphys = false;
+ //super.onDisable();
+ }
+ @Override
+ public int getWidth() {
+ return 0;
+ }
+
+ @Override
+ public int getHeight() {
+ return 0;
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/Keystrokes.java b/src/minecraft/animeware/hud/mod/Mods/Keystrokes.java
new file mode 100644
index 0000000..2243679
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/Keystrokes.java
@@ -0,0 +1,171 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.hud.mod.HudMod;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.settings.KeyBinding;
+import net.minecraft.util.ResourceLocation;
+
+public class Keystrokes extends HudMod {
+
+ public ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");;
+
+ public Keystrokes() {
+ super("Keystrokes", "Shows when keys are pressed", new ResourceLocation("Animeware/icons/glacier/keystrokes.png"), 900, 467);
+ this.addSettings(color);
+ }
+
+ public static enum KeystrokesMode {
+
+ WASD(Key.W, Key.A, Key.S, Key.D),
+ WASD_MOUSE(Key.W, Key.A, Key.S, Key.D, Key.LMB, Key.RMB),
+ WASD_JUMP(Key.W, Key.A, Key.S, Key.D, Key.JUMP1),
+ WASD_JUMP_MOUSE(Key.W, Key.A, Key.S, Key.D, Key.LMB, Key.RMB, Key.JUMP2);
+
+ private final Key[] keys;
+ private int width,height;
+
+ private KeystrokesMode(Key... keysIn) {
+ this.keys = keysIn;
+
+ for(Key key: keys) {
+ this.width = Math.max(this.width, key.getX() + key.getWidth());
+ this.height = Math.max(this.height, key.getY() + key.getHeight());
+ }
+ }
+
+ public int getHeight() {
+ return height;
+ }
+
+ public int getWidth() {
+ return width;
+ }
+
+ public Key[] getKeys() {
+ return keys;
+ }
+ }
+
+ public static class Key {
+ public static Minecraft mc = Minecraft.getMinecraft();
+
+ public static final Key W = new Key("W", mc.gameSettings.keyBindForward, 21, 1, 18, 18);
+ public static final Key A = new Key("A", mc.gameSettings.keyBindLeft, 1, 21, 18, 18);
+ public static final Key S = new Key("S", mc.gameSettings.keyBindBack, 21, 21, 18, 18);
+ public static final Key D = new Key("D", mc.gameSettings.keyBindRight, 41, 21, 18, 18);
+
+ public static final Key LMB = new Key("LMB", mc.gameSettings.keyBindAttack, 1, 41, 28, 18);
+ public static final Key RMB = new Key("RMB", mc.gameSettings.keyBindUseItem, 31, 41, 28, 18);
+
+ public static final Key JUMP1 = new Key("m-----", mc.gameSettings.keyBindJump, 1, 41, 58, 11);
+ public static final Key JUMP2 = new Key("m-----", mc.gameSettings.keyBindJump, 1, 61, 58, 11);
+
+
+
+
+
+ private final String name;
+ private final KeyBinding keyBind;
+ private final int x,y,w,h;
+
+ public Key(String name, KeyBinding keybind, int x, int y, int w, int h) {
+ this.name = name;
+ this.keyBind = keybind;
+ this.x = x;
+ this.y = y;
+ this.w = w;
+ this.h = h;
+ }
+
+ public boolean isDown() {
+ return keyBind.isKeyDown();
+ }
+
+ public int getHeight() {
+ return h;
+ }
+
+ public int getWidth() {
+ return w;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public int getX() {
+ return x;
+ }
+
+ public int getY() {
+ return y;
+ }
+
+
+ }
+
+ private KeystrokesMode mode = KeystrokesMode.WASD_JUMP_MOUSE;
+
+ @Override
+ public int getWidth() {
+ return 58;
+ }
+
+ @Override
+ public int getHeight() {
+ return 72;
+ }
+
+ @Override
+ public void draw() {
+ GL11.glPushMatrix();
+
+ for(Key key : mode.getKeys()) {
+
+ int textWidth = fr.getStringWidth(key.getName());
+
+ Gui.drawRect(
+ getX() + key.getX(),
+ getY() + key.getY(),
+ getX() + key.getX() + key.getWidth(),
+ getY() + key.getY() + key.getHeight(),
+ key.isDown() ? new Color(255, 255, 255, 102).getRGB() : new Color(0, 0, 0, 150).getRGB()
+ );
+ fr.drawString(key.getName(), getX() + key.getX() + key.getWidth() / 2 - textWidth / 2, getY() + key.getY() + key.getHeight() / 2 - 4, key.isDown() ? new Color(0, 0, 0, 255).getRGB(): -1);
+
+ }
+ GL11.glPopMatrix();
+ super.draw();
+
+ }
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ GL11.glPushMatrix();
+
+ for(Key key : mode.getKeys()) {
+
+ int textWidth = fr.getStringWidth(key.getName());
+
+ Gui.drawRect(
+ getX() + key.getX(),
+ getY() + key.getY(),
+ getX() + key.getX() + key.getWidth(),
+ getY() + key.getY() + key.getHeight(),
+ key.isDown() ? new Color(255, 255, 255, 102).getRGB() : new Color(0, 0, 0, 150).getRGB()
+ );
+
+ fr.drawString(key.getName(), getX() + key.getX() + key.getWidth() / 2 - textWidth / 2, getY() + key.getY() + key.getHeight() / 2 - 4, key.isDown() ? new Color(0, 0, 0, 255).getRGB(): -1);
+ }
+
+ GL11.glPopMatrix();
+ super.renderDummy(mouseX, mouseY);
+ }
+
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/hud/mod/Mods/MemUsage.java b/src/minecraft/animeware/hud/mod/Mods/MemUsage.java
new file mode 100644
index 0000000..93ede06
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/MemUsage.java
@@ -0,0 +1,86 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+
+import animeware.hud.mod.HudMod;
+import animeware.util.ChromaString;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+
+public class MemUsage extends HudMod {
+
+ public ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");;
+
+ public MemUsage() {
+ super("Memory", "Memory usage", new ResourceLocation("Animeware/icons/ram.png"), 50, 137);
+ this.addSettings(color);
+ }
+
+ @Override
+ public int getWidth() {
+ Runtime runtime = Runtime.getRuntime();
+ String str = "Mem: " + (runtime.totalMemory() - runtime.freeMemory()) * 100L / runtime.maxMemory() + "% ";
+ return fr.getStringWidth(str) + 8;
+ }
+
+ @Override
+ public int getHeight() {
+ return fr.FONT_HEIGHT + 9;
+ }
+
+ @Override
+ public void draw() {
+ //Gui.drawRect(getX(), getY(), getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 50).getRGB());
+ Gui.drawRect(getX() + 3, getY() + 3, getX() + getWidth() - 5, getY() + getHeight() - 4, new Color(0, 0, 0, 170).getRGB());
+
+ Runtime runtime = Runtime.getRuntime();
+ String str = "Mem: " + (runtime.totalMemory() - runtime.freeMemory()) * 100L / runtime.maxMemory() + "% ";
+
+ if(color.getMode().equals("Blue")) {
+ fr.drawStringWithShadow("1" + str, getX() + 6, getY() + 5, -1);
+ //fr.drawStringWithShadow("8[1FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Cyan")) {
+ fr.drawStringWithShadow("b" + str, getX() + 6, getY() + 5, -1);
+ //fr.drawStringWithShadow("8[bFPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Red")) {
+ fr.drawStringWithShadow("4" + str, getX() + 6, getY() + 5, -1);
+ //fr.drawStringWithShadow("8[4FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Purple")) {
+ fr.drawStringWithShadow("5" + str, getX() + 6, getY() + 5, -1);
+ //fr.drawStringWithShadow("8[5FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Chroma")) {
+ ChromaString.drawChromaString(str, getX() + 6, getY() + 5, -1);
+ } else if(color.getMode().equals("White")) {
+ fr.drawStringWithShadow(str, getX() + 6, getY() + 5, -1);
+ }
+
+
+ }
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ Runtime runtime = Runtime.getRuntime();
+ String str = "Mem: " + (runtime.totalMemory() - runtime.freeMemory()) * 100L / runtime.maxMemory() + "% ";
+
+ if(color.getMode().equals("Blue")) {
+ fr.drawStringWithShadow("1" + str, getX() + 6, getY() + 5, -1);
+ //fr.drawStringWithShadow("8[1FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Cyan")) {
+ fr.drawStringWithShadow("b" + str, getX() + 6, getY() + 5, -1);
+ //fr.drawStringWithShadow("8[bFPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Red")) {
+ fr.drawStringWithShadow("4" + str, getX() + 6, getY() + 5, -1);
+ //fr.drawStringWithShadow("8[4FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Purple")) {
+ fr.drawStringWithShadow("5" + str, getX() + 6, getY() + 5, -1);
+ //fr.drawStringWithShadow("8[5FPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Chroma")) {
+ ChromaString.drawChromaString(str, getX() + 6, getY() + 5, -1);
+ } else if(color.getMode().equals("White")) {
+ fr.drawStringWithShadow(str, getX() + 6, getY() + 5, -1);
+ }
+ super.renderDummy(mouseX, mouseY);
+ }
+
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/hud/mod/Mods/MinimalBobbing.java b/src/minecraft/animeware/hud/mod/Mods/MinimalBobbing.java
new file mode 100644
index 0000000..4ff758a
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/MinimalBobbing.java
@@ -0,0 +1,33 @@
+package animeware.hud.mod.Mods;
+
+import java.text.DecimalFormat;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.cosmetic.Booleans;
+import animeware.hud.mod.HudMod;
+import animeware.util.ChromaString;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.client.renderer.RenderHelper;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ResourceLocation;
+
+public class MinimalBobbing extends HudMod {
+
+ public MinimalBobbing() {
+ super("Minimal Bobbing", "Disables crosshair movement", new ResourceLocation("Animeware/icons/placeholder.png"), 900, 140);
+ }
+
+ @Override
+ public void onEnable() {
+ Booleans.minimalBobbing = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.minimalBobbing = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/Miniplayer.java b/src/minecraft/animeware/hud/mod/Mods/Miniplayer.java
new file mode 100644
index 0000000..3585de5
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/Miniplayer.java
@@ -0,0 +1,110 @@
+package animeware.hud.mod.Mods;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.hud.mod.HudMod;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.OpenGlHelper;
+import net.minecraft.client.renderer.RenderHelper;
+import net.minecraft.client.renderer.entity.RenderManager;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.util.ResourceLocation;
+
+public class Miniplayer extends HudMod {
+
+ /** The X size of the inventory window in pixels. */
+ protected int xSize = 176;
+
+ /** The Y size of the inventory window in pixels. */
+ protected int ySize = 166;
+
+ protected int guiLeft;
+
+ protected int guiTop;
+
+ /** The old x position of the mouse pointer */
+ private float oldMouseX;
+
+ /** The old y position of the mouse pointer */
+ private float oldMouseY;
+
+ EntityLivingBase target;
+
+ public Miniplayer() {
+ super("Mini Player", "Small player figure", new ResourceLocation("Animeware/icons/placeholder.png"), 5, 5);
+
+ }
+
+ public static void Playerdraw(int posX, int posY, int scale, float mouseX, float mouseY, EntityLivingBase ent)
+ {
+ GlStateManager.enableColorMaterial();
+ GlStateManager.pushMatrix();
+ GlStateManager.translate((float)posX, (float)posY, 50.0F);
+ GlStateManager.scale((float)(-35), (float)35, (float)35);
+ GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F);
+ float f = ent.renderYawOffset;
+ float f1 = ent.rotationYaw;
+ float f2 = ent.rotationPitch;
+ float f3 = ent.prevRotationYawHead;
+ float f4 = ent.rotationYawHead;
+ GlStateManager.rotate(135.0F, 0.0F, 1.0F, 0.0F);
+ RenderHelper.enableStandardItemLighting();
+ GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(-((float)Math.atan((double)(mouseY / 40.0F))) * 20.0F, 1.0F, 0.0F, 0.0F);
+ ent.renderYawOffset = (float)Math.atan((double)(mouseX / 40.0F)) * 20.0F;
+ ent.rotationYaw = (float)Math.atan((double)(mouseX / 40.0F)) * 40.0F;
+ ent.rotationPitch = -((float)Math.atan((double)(mouseY / 40.0F))) * 20.0F;
+ ent.rotationYawHead = ent.rotationYaw;
+ ent.prevRotationYawHead = ent.rotationYaw;
+ GlStateManager.translate(0.0F, 0.0F, 0.0F);
+ RenderManager rendermanager = Minecraft.getMinecraft().getRenderManager();
+ rendermanager.setPlayerViewY(180.0F);
+ rendermanager.setRenderShadow(false);
+ rendermanager.renderEntityWithPosYaw(ent, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F);
+ rendermanager.setRenderShadow(true);
+ ent.renderYawOffset = f;
+ ent.rotationYaw = f1;
+ ent.rotationPitch = f2;
+ ent.prevRotationYawHead = f3;
+ ent.rotationYawHead = f4;
+ GlStateManager.popMatrix();
+ RenderHelper.disableStandardItemLighting();
+ GlStateManager.disableRescaleNormal();
+ GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit);
+ GlStateManager.disableTexture2D();
+ GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
+ }
+
+ @Override
+ public void draw() {
+
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+
+ Playerdraw(getX() + 15, getY() + 50, 25, 50, 0, mc.thePlayer);
+
+ super.draw();
+ }
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+ Playerdraw(getX() + 15, getY() + 50, 24, 50, 0, mc.thePlayer);
+
+
+
+ super.renderDummy(mouseX, mouseY);
+ }
+
+ @Override
+ public int getWidth() {
+ return 29;
+ }
+
+ @Override
+ public int getHeight() {
+ return 54;
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/ModArrows.java b/src/minecraft/animeware/hud/mod/Mods/ModArrows.java
new file mode 100644
index 0000000..9f5a4aa
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/ModArrows.java
@@ -0,0 +1,66 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+
+import animeware.hud.mod.HudMod;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ResourceLocation;
+
+public class ModArrows extends HudMod {
+
+ //ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");
+
+ public ModArrows() {
+ super("ArrowMod", "Number of arrows in your inventory", new ResourceLocation("Animeware/icons/placeholder.png"), 5, 5);
+ //this.addSettings(color);
+ }
+
+ @Override
+ public int getWidth() {
+ return 20;
+ }
+
+ @Override
+ public int getHeight() {
+ return 23;
+ }
+
+ @Override
+ public void draw() {
+ if(this.getRemainingArrows() < 1) {
+ fr.drawString(this.getRemainingArrows() + "", getX() + 8, getY() + 15, Color.RED.getRGB());
+ } else {
+ fr.drawString(this.getRemainingArrows() + "", getX() + 8, getY() + 15, Color.WHITE.getRGB());
+ }
+ this.mc.getRenderItem().renderItemIntoGUI(new ItemStack(Items.arrow), getX() + 3, getY() - 1);
+
+ }
+
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ if(this.getRemainingArrows() < 1) {
+ fr.drawString(this.getRemainingArrows() + "", getX() + 8, getY() + 15, Color.RED.getRGB());
+ } else {
+ fr.drawString(this.getRemainingArrows() + "", getX() + 8, getY() + 15, Color.WHITE.getRGB());
+ }
+ this.mc.getRenderItem().renderItemIntoGUI(new ItemStack(Items.arrow), getX() + 3, getY() - 1);
+ super.renderDummy(mouseX, mouseY);
+ }
+
+
+ private int getRemainingArrows() {
+ int i = 0;
+
+ for(ItemStack itemstack : this.mc.thePlayer.inventory.mainInventory) {
+ if(itemstack != null && itemstack.getItem().equals(Items.arrow)) {
+ i += itemstack.stackSize;
+ }
+ }
+
+ return i;
+ }
+
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/ModDirection.java b/src/minecraft/animeware/hud/mod/Mods/ModDirection.java
new file mode 100644
index 0000000..c5fe37e
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/ModDirection.java
@@ -0,0 +1,71 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+
+import animeware.hud.mod.HudMod;
+import animeware.util.ChromaString;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+
+public class ModDirection extends HudMod {
+
+ public ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");;
+
+ public ModDirection() {
+ super("Direction", "Facing direction", new ResourceLocation("Animeware/icons/direction.png"), 0, 91);
+ this.addSettings(color);
+ }
+
+ @Override
+ public int getWidth() {
+ return fr.getStringWidth("[Direction: north]");
+ }
+
+ @Override
+ public int getHeight() {
+ return fr.FONT_HEIGHT;
+ }
+
+ @Override
+ public void draw() {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ if(color.getMode().equals("Blue")) {
+ fr.drawStringWithShadow("8[1Direction f" + mc.thePlayer.getHorizontalFacing() + "8]", getX() + 1, getY() + 1, -1);
+ } else if(color.getMode().equals("Cyan")) {
+ fr.drawStringWithShadow("8[bDirection f" + mc.thePlayer.getHorizontalFacing() + "8]", getX() + 1, getY() + 1, -1);
+ } else if(color.getMode().equals("Red")) {
+ fr.drawStringWithShadow("8[4Direction f" + mc.thePlayer.getHorizontalFacing() + "8]", getX() + 1, getY() + 1, -1);
+ } else if(color.getMode().equals("Purple")) {
+ fr.drawStringWithShadow("8[5Direction f" + mc.thePlayer.getHorizontalFacing() + "8]", getX() + 1, getY() + 1, -1);
+ } else if(color.getMode().equals("Chroma")) {
+ ChromaString.drawChromaString("[Direction " + mc.thePlayer.getHorizontalFacing() + "]", getX() + 1, getY() + 1, -1);
+ } else if(color.getMode().equals("White")) {
+ fr.drawStringWithShadow("8[fDirection f" + mc.thePlayer.getHorizontalFacing() + "8]", getX() + 1, getY() + 1, -1);
+ }
+
+
+
+}
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+
+ if(color.getMode().equals("Blue")) {
+ fr.drawStringWithShadow("8[1Direction f" + mc.thePlayer.getHorizontalFacing() + "8]", getX() + 1, getY() + 1, -1);
+ } else if(color.getMode().equals("Cyan")) {
+ fr.drawStringWithShadow("8[bDirection f" + mc.thePlayer.getHorizontalFacing() + "8]", getX() + 1, getY() + 1, -1);
+ } else if(color.getMode().equals("Red")) {
+ fr.drawStringWithShadow("8[4Direction f" + mc.thePlayer.getHorizontalFacing() + "8]", getX() + 1, getY() + 1, -1);
+ } else if(color.getMode().equals("Purple")) {
+ fr.drawStringWithShadow("8[5Direction f" + mc.thePlayer.getHorizontalFacing() + "8]", getX() + 1, getY() + 1, -1);
+ } else if(color.getMode().equals("Chroma")) {
+ ChromaString.drawChromaString("[Direction " + mc.thePlayer.getHorizontalFacing() + "]", getX() + 1, getY() + 1, -1);
+ } else if(color.getMode().equals("White")) {
+ fr.drawStringWithShadow("8[fDirection f" + mc.thePlayer.getHorizontalFacing() + "8]", getX() + 1, getY() + 1, -1);
+ }
+ super.renderDummy(mouseX, mouseY);
+}
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/ModHorseStats.java b/src/minecraft/animeware/hud/mod/Mods/ModHorseStats.java
new file mode 100644
index 0000000..93a543e
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/ModHorseStats.java
@@ -0,0 +1,62 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+import java.text.DecimalFormat;
+
+import animeware.hud.ScreenPosition;
+import animeware.hud.mod.HudMod;
+import animeware.util.render.RoundedUtils;
+import net.minecraft.entity.SharedMonsterAttributes;
+import net.minecraft.entity.passive.EntityHorse;
+import net.minecraft.util.ResourceLocation;
+
+public class ModHorseStats extends HudMod {
+
+ public ModHorseStats() {
+ super("Horse Status", "Displays horse stats", new ResourceLocation("Animeware/icons/placeholder.png"), 450, 320);
+ // TODO Auto-generated constructor stub
+ }
+
+ private final DecimalFormat df = new DecimalFormat("0.0");
+
+ public int getWidth() {
+ return 62;
+ }
+
+ @Override
+ public int getHeight() {
+ return fr.FONT_HEIGHT * 2 + 4;
+ }
+
+ @Override
+ public void draw() {
+ //RoundedUtils.drawSmoothRoundedRect(getX(), getY(), getX() + getWidth(), getY() + getHeight(), 7,new Color(0, 0, 0, 170).getRGB());
+ if(mc.objectMouseOver.entityHit instanceof EntityHorse) {
+ EntityHorse horse = (EntityHorse) mc.objectMouseOver.entityHit;
+
+ if(mc.thePlayer.isRidingHorse()) return; //Recommended: If you're riding the horse it doesn't work well: it renders only very occasionally and then only for a few frames.
+
+ fr.drawString("Speed: " + getHorseSpeedRounded(horse.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue()) + " BPS" , getX(), getY(), -1);
+ fr.drawString("Jump: " + df.format(horse.getHorseJumpStrength() * 5.5) + " Blocks" , getX(), getY() + 10, -1);
+ }
+
+
+ }
+
+ private String getHorseSpeedRounded(double baseSpeed) {
+ //Read https://minecraft.fandom.com/wiki/Horse#Movement_speed for more information.
+ final float factor = 43.1703703704f;
+
+ float speed = (float) (baseSpeed * factor);
+
+ return df.format(speed);
+ }
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ //RoundedUtils.drawSmoothRoundedRect(getX(), getY(), getX() + getWidth(), getY() + getHeight(), 7,new Color(0, 0, 0, 170).getRGB());
+ fr.drawString("Jump: 2.3 Blocks" , getX(), getY(), -1);
+ fr.drawString("Speed: 5.3 BPS" , getX(), getY() + 10, -1);
+ }
+
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/hud/mod/Mods/ModMLDGHelper.java b/src/minecraft/animeware/hud/mod/Mods/ModMLDGHelper.java
new file mode 100644
index 0000000..6855f8f
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/ModMLDGHelper.java
@@ -0,0 +1,223 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+
+import animeware.hud.ScreenPosition;
+import animeware.hud.mod.HudMod;
+import net.minecraft.block.Block;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.EntityPlayerSP;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.MovingObjectPosition;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.MovingObjectPosition.MovingObjectType;
+
+public class ModMLDGHelper extends HudMod{
+
+ String prefix;
+ String suffix;
+
+
+ public ModMLDGHelper() {
+ super("MLDGHelper", "I actually dont know", new ResourceLocation("Animeware/icons/placeholder.png"), 0, 141);
+ // TODO Auto-generated constructor stub
+ }
+
+ @Override
+ public int getWidth() {
+ return mc.fontRendererObj.getStringWidth(prefix + suffix);
+ }
+
+ @Override
+ public int getHeight() {
+ return fr.FONT_HEIGHT;
+ }
+
+ @Override
+ public void draw() {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ Minecraft mc = Minecraft.getMinecraft();
+ EntityPlayerSP p = mc.thePlayer;
+
+ MovingObjectPosition mp = p.rayTrace(200.0D, 1.0F);
+ int height = mp.getBlockPos().getY() + 1;
+
+
+ String mlgstatus;
+
+ int down = mp.getBlockPos().getY() + 1;
+ int up = Minecraft.getMinecraft().thePlayer.getPosition().getY();
+
+ int df = up - down;
+
+ if(df <= 5) {
+ mlgstatus = "Save";
+ } else {
+ if ((df >= 6 && df <= 16) ||
+ df == 18 ||
+ df == 19 ||
+ df == 21 ||
+ df == 22 ||
+ df == 24 ||
+ df == 26 ||
+ df == 27 ||
+ df == 29 ||
+ df == 33 ||
+ df == 34 ||
+ df == 36 ||
+ df == 38 ||
+ df == 40 ||
+ df == 42 ||
+ df == 44 ||
+ df == 47 ||
+ df == 49 ||
+ df == 51 ||
+ df == 53 ||
+ df == 55 ||
+ df == 58 ||
+ df == 60 ||
+ df == 62 ||
+ df == 65 ||
+ df == 67 ||
+ df == 69 ||
+ df == 72 ||
+ df == 74 ||
+ df == 77 ||
+ df == 79 ||
+ df == 82 ||
+ df == 85 ||
+ df == 87 ||
+ df == 90 ||
+ df == 93 ||
+ df == 95 ||
+ df == 98 ||
+ df == 101 ||
+ df == 104 ||
+ df == 106 ||
+ df == 109 ||
+ df == 112 ||
+ df == 115 ||
+ df == 118 ||
+ df == 121 ||
+ df == 124 ||
+ df == 127 ||
+ df == 130 ||
+ df == 135 ||
+ df == 138 ||
+ df == 142 ||
+ df == 145 ||
+ df == 148 ||
+ df == 151 ||
+ df == 153 ||
+ df == 154
+ ) {
+
+ mlgstatus = "Run";
+
+ } else {
+ if (df == 18 ||
+ df == 17 ||
+ df == 20 ||
+ df == 23 ||
+ df == 28 ||
+ df == 30 ||
+ df == 31 ||
+ df == 35 ||
+ df == 37 ||
+ df == 39 ||
+ df == 41 ||
+ df == 43 ||
+ df == 45 ||
+ df == 50 ||
+ df == 52 ||
+ df == 54 ||
+ df == 56 ||
+ df == 59 ||
+ df == 61 ||
+ df == 63 ||
+ df == 66 ||
+ df == 68 ||
+ df == 71 ||
+ df == 73 ||
+ df == 76 ||
+ df == 78 ||
+ df == 81 ||
+ df == 83 ||
+ df == 86 ||
+ df == 91 ||
+ df == 94 ||
+ df == 97 ||
+ df == 100 ||
+ df == 102 ||
+ df == 105 ||
+ df == 108 ||
+ df == 111 ||
+ df == 114 ||
+ df == 119 ||
+ df == 122 ||
+ df == 125 ||
+ df == 128 ||
+ df == 131 ||
+ df == 134 ||
+ df == 137 ||
+ df == 140 ||
+ df == 143 ||
+ df == 146 ||
+ df == 150 ||
+ df == 156
+ ) {
+
+ mlgstatus = "Jump";
+
+ } else {
+ mlgstatus = "Impossible";
+ }
+ }
+ }
+
+
+ if (mp != null && mp.typeOfHit == MovingObjectType.BLOCK && df >= 0) {
+ prefix = "c" + down + "8: f";
+
+ if (Minecraft.getMinecraft().theWorld.getBlockState(mp.getBlockPos()) != Block.getStateById(30)) {
+
+ if (up < down) {
+ prefix = "cN/A8: f";
+ suffix = "Not specified";
+ } else {
+ prefix = "c" + down + "8: f";
+ suffix = mlgstatus;
+ }
+
+ } else {
+
+ suffix = "Cobweb! Choose another block!";
+
+ }
+ } else {
+ prefix = "cN/A8: f";
+ suffix = "Not specified";
+ }
+
+
+
+ //df for run
+ //18,19,21,22,24,26,27,29,33,34,36,38,40, 42,44,47, 49, 51, 53, 55, 58, 60, 62, 65, 67, 69, 72, 74, 77, 79, 82, 85, 87, 90
+ //93, 95, 98, 101, 104, 106, 109, 112, 115, 118, 121, 124, 127, 130, 135, 138, 142, 145, 148, 151, 153, 154
+
+ //df for jump
+ //17, 20, 23, 28, 30, 31, 35, 37, 39, 41, 43, 45, 50, 52, 54, 56, 59, 61, 63, 66, 68, 71, 73, 76, 78
+ //81, 83, 86, 89, 91, 94, 97, 100, 102, 105, 108, 111, 114, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 150, 156
+
+
+
+ fr.drawStringWithShadow(prefix + suffix, getX(), getY(), -1);
+ }
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ fr.drawStringWithShadow("cMLG8: fSave", getX(), getY(), -1);
+ super.renderDummy(mouseX, mouseY);
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/hud/mod/Mods/ModParticles.java b/src/minecraft/animeware/hud/mod/Mods/ModParticles.java
new file mode 100644
index 0000000..c7e0641
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/ModParticles.java
@@ -0,0 +1,47 @@
+package animeware.hud.mod.Mods;
+
+import animeware.hud.ScreenPosition;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class ModParticles extends HudMod {
+
+ public ModParticles() {
+ super("No Particles", "Removes all particles", new ResourceLocation("Animeware/icons/quit.png"), 5, 5);
+ // TODO Auto-generated constructor stub
+ }
+
+ private ScreenPosition pos;
+
+ @Override
+ public int getWidth() {
+
+ return fr.getStringWidth("");
+
+
+//Put Text here if wanted Must be same text as font.drawString ↑
+
+
+
+ }
+
+ @Override
+ public int getHeight() {
+ return fr.FONT_HEIGHT;
+ }
+
+ @Override
+ public void draw() {
+ //fr.drawStringWithShadow("", pos.getAbsoluteX() + getWidth() + 3, pos.getAbsoluteY() + 4, -1);
+
+ //Put Text here if wanted Must be same text as font.drawString ↑
+
+ this.mc.gameSettings.particleSetting = 10;
+
+
+
+ return;
+
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/MoreParticles.java b/src/minecraft/animeware/hud/mod/Mods/MoreParticles.java
new file mode 100644
index 0000000..e36f6e3
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/MoreParticles.java
@@ -0,0 +1,23 @@
+package animeware.hud.mod.Mods;
+
+import animeware.cosmetic.Booleans;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class MoreParticles extends HudMod {
+
+ public MoreParticles() {
+ super("MoreParticles", "Multiplies particles", new ResourceLocation("Animeware/icons/placeholder.png"), 0, 0);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.MoreParticles = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.MoreParticles = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/MotionBlur.java b/src/minecraft/animeware/hud/mod/Mods/MotionBlur.java
new file mode 100644
index 0000000..014a284
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/MotionBlur.java
@@ -0,0 +1,44 @@
+package animeware.hud.mod.Mods;
+
+import net.minecraft.client.Minecraft;
+import org.lwjgl.opengl.GL11;
+
+public class MotionBlur {
+ public static float f;
+
+ public static void createAccumulation() {
+ float f = getAccumulationValue();
+ GL11.glAccum(GL11.GL_MULT, f);
+ GL11.glAccum(GL11.GL_ACCUM, 1.0F - f);
+ GL11.glAccum(GL11.GL_RETURN, 1.0F);
+ }
+
+ public static float getMultiplier() {
+ return Minecraft.getDebugFPS() > 120 ? (Minecraft.getDebugFPS() > 200 ? 60.0F : 30.0F) : 0.0F;
+ }
+
+ public static float getAccumulationValue() {
+ f = getMultiplier() * 10.0F;
+ long lastTimestampInGame = System.currentTimeMillis();
+
+ if (f > 996.0F) {
+ f = 996.0F;
+ }
+
+ if (f > 990.0F) {
+ f = 990.0F;
+ }
+
+ long i = System.currentTimeMillis() - lastTimestampInGame;
+
+ if (i > 10000L) {
+ return 0.0F;
+ } else {
+ if (f < 0.0F) {
+ f = 0.0F;
+ }
+
+ return f / 1000.0F;
+ }
+ }
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/Motionblurmodule.java b/src/minecraft/animeware/hud/mod/Mods/Motionblurmodule.java
new file mode 100644
index 0000000..3ff9381
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/Motionblurmodule.java
@@ -0,0 +1,26 @@
+package animeware.hud.mod.Mods;
+
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class Motionblurmodule extends HudMod {
+ public Motionblurmodule() {
+ super("MotionBlur", "", new ResourceLocation("Animeware/icons/placeholder.png"), 0, 0);
+ }
+
+ @Override
+ public void onEnable() {
+ MotionBlur.createAccumulation();
+ //Minecraft.getMinecraft().displayGuiScreen(new Cosmetics());
+ }
+
+ public void OnUpdate(){
+ MotionBlur.createAccumulation();
+ //Lwhite.toggletracert();
+ }
+ public void OnDisable() {
+
+ }
+
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/NotificationsModule.java b/src/minecraft/animeware/hud/mod/Mods/NotificationsModule.java
new file mode 100644
index 0000000..e048752
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/NotificationsModule.java
@@ -0,0 +1,27 @@
+package animeware.hud.mod.Mods;
+
+import org.lwjgl.input.Keyboard;
+
+import animeware.hud.Category;
+import animeware.hud.mod.HudMod;
+import animeware.util.misc.Timer;
+import animeware.util.settings.BooleanSetting;
+import animeware.util.settings.ModeSetting;
+import animeware.util.settings.NumberSetting;
+import net.minecraft.util.ResourceLocation;
+
+public class NotificationsModule extends HudMod {
+
+ public NumberSetting time = new NumberSetting("Time", 2.5, 1, 10, 0.5);
+ //public BooleanSetting modToggle = new BooleanSetting("Module Toggle", true);
+ public ModeSetting font = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");;
+
+ public NotificationsModule() {
+ super("Notifications", "Customize your Notifications", new ResourceLocation("Animeware/icons/placeholder.png"), 0, 0);
+ addSettings(time,font);
+ }
+
+ Timer timer = new Timer();
+
+
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/hud/mod/Mods/PackDisplay.java b/src/minecraft/animeware/hud/mod/Mods/PackDisplay.java
new file mode 100644
index 0000000..73fc790
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/PackDisplay.java
@@ -0,0 +1,94 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+
+import animeware.hud.mod.HudMod;
+import animeware.util.ChromaString;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+import optifine.Config;
+
+public class PackDisplay extends HudMod {
+
+ public ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");;
+
+ public PackDisplay() {
+ super("PackDisplay", "Shows active pack", new ResourceLocation("Animeware/icons/packoverlay.png"), 0, 71);
+ this.addSettings(color);
+ }
+
+ @Override
+ public void draw() {
+ String pack = "";
+ if(!Config.getResourcePackNames().equalsIgnoreCase("default"))
+ pack = Config.getResourcePackNames().split(",")[Config.getResourcePacks().length -1];
+ else
+ pack = "default";
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ if(color.getMode().equals("Blue")) {
+ if(!Config.getResourcePackNames().equals("default")) {
+ fr.drawStringWithShadow("8[1Pack:f " + pack + "8]", getX(), getY(), -1);
+ } else {
+ fr.drawStringWithShadow("", getX(), getY(), -1);
+ }
+ } else if(color.getMode().equals("Cyan")) {
+ if(!Config.getResourcePackNames().equals("default")) {
+ fr.drawStringWithShadow("8[bPack:f " + pack + "8]", getX(), getY(), -1);
+ } else {
+ fr.drawStringWithShadow("", getX(), getY(), -1);
+ }
+ } else if(color.getMode().equals("Red")) {
+ if(!Config.getResourcePackNames().equals("default")) {
+ fr.drawStringWithShadow("8[4Pack:f " + pack + "8]", getX(), getY(), -1);
+ } else {
+ fr.drawStringWithShadow("", getX(), getY(), -1);
+ }
+ } else if(color.getMode().equals("Purple")) {
+ if(!Config.getResourcePackNames().equals("default")) {
+ fr.drawStringWithShadow("8[4Pack:f " + pack + "8]", getX(), getY(), -1);
+ } else {
+ fr.drawStringWithShadow("", getX(), getY(), -1);
+ }
+ } else if(color.getMode().equals("Chroma")) {
+ if(!Config.getResourcePackNames().equals("default")) {
+ ChromaString.drawChromaString("[Pack: " + pack + "]", getX(), getY(), -1);
+ } else {
+ ChromaString.drawChromaString("", getX(), getY(), -1);
+ }
+ } else if(color.getMode().equals("White")) {
+ if(!Config.getResourcePackNames().equals("default")) {
+ fr.drawStringWithShadow("8[fPack: " + pack + "8]", getX(), getY(), -1);
+ } else {
+ fr.drawStringWithShadow("", getX(), getY(), -1);
+ }
+ }
+
+
+ super.draw();
+ }
+
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ fr.drawStringWithShadow("8[fPack: Uchiha Pack8]", getX(), getY(), -1);
+
+ super.renderDummy(mouseX, mouseY);
+ }
+
+ @Override
+ public int getWidth() {
+ String pack = "";
+ if(!Config.getResourcePackNames().equalsIgnoreCase("default"))
+ pack = Config.getResourcePackNames().split(",")[Config.getResourcePacks().length -1];
+ else
+ pack = "default";
+ return fr.getStringWidth("8[fPack: " + pack + "8]");
+ }
+
+ @Override
+ public int getHeight() {
+ return fr.FONT_HEIGHT;
+ }
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/Ping.java b/src/minecraft/animeware/hud/mod/Mods/Ping.java
new file mode 100644
index 0000000..c60faf1
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/Ping.java
@@ -0,0 +1,82 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+
+import animeware.hud.mod.HudMod;
+import animeware.util.ChromaString;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.util.ResourceLocation;
+
+public class Ping extends HudMod{
+
+ public ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");;
+
+ public Ping() {
+ super("Ping", "Displays ping", new ResourceLocation("Animeware/icons/glacier/ping.png"), 0, 41);
+ this.addSettings(color);
+ }
+
+ @Override
+ public void draw() {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ if(color.getMode().equals("Blue")) {
+ if(!MinecraftServer.getServer().isSinglePlayer()) {
+ fr.drawStringWithShadow("8[1Ping:f" + mc.getNetHandler().getPlayerInfo(mc.thePlayer.getUniqueID()).getResponseTime() + "ms8]", getX(), getY(), -1);
+ } else {
+ fr.drawStringWithShadow("8[1Ping:f00ms8]", getX(), getY(), -1);
+ }
+ } else if(color.getMode().equals("Cyan")) {
+ if(!MinecraftServer.getServer().isSinglePlayer()) {
+ fr.drawStringWithShadow("8[bPing:f" + mc.getNetHandler().getPlayerInfo(mc.thePlayer.getUniqueID()).getResponseTime() + "ms8]", getX(), getY(), -1);
+ } else {
+ fr.drawStringWithShadow("8[bPing:f00ms8]", getX(), getY(), -1);
+ }
+ } else if(color.getMode().equals("Red")) {
+ if(!MinecraftServer.getServer().isSinglePlayer()) {
+ fr.drawStringWithShadow("8[4Ping:f" + mc.getNetHandler().getPlayerInfo(mc.thePlayer.getUniqueID()).getResponseTime() + "ms8]", getX(), getY(), -1);
+ } else {
+ fr.drawStringWithShadow("8[4Ping:f00ms8]", getX(), getY(), -1);
+ }
+ } else if(color.getMode().equals("Purple")) {
+ if(!MinecraftServer.getServer().isSinglePlayer()) {
+ fr.drawStringWithShadow("8[5Ping:f" + mc.getNetHandler().getPlayerInfo(mc.thePlayer.getUniqueID()).getResponseTime() + "ms8]", getX(), getY(), -1);
+ } else {
+ fr.drawStringWithShadow("8[5Ping:f00ms8]", getX(), getY(), -1);
+ }
+ } else if(color.getMode().equals("Chroma")) {
+ if(!MinecraftServer.getServer().isSinglePlayer()) {
+ ChromaString.drawChromaString("[Ping:" + mc.getNetHandler().getPlayerInfo(mc.thePlayer.getUniqueID()).getResponseTime() + "ms]", getX(), getY(), -1);
+ } else {
+ ChromaString.drawChromaString("[Ping:00ms]", getX(), getY(), -1);
+ }
+ } else if(color.getMode().equals("White")) {
+ if(!MinecraftServer.getServer().isSinglePlayer()) {
+ fr.drawStringWithShadow("8[fPing:f" + mc.getNetHandler().getPlayerInfo(mc.thePlayer.getUniqueID()).getResponseTime() + "ms8]", getX(), getY(), -1);
+ } else {
+ fr.drawStringWithShadow("8[fPing:f00ms8]", getX(), getY(), -1);
+ }
+ }
+
+ super.draw();
+ }
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ fr.drawStringWithShadow("8[fPing:f00ms8]", getX(), getY(), -1);
+
+ super.renderDummy(mouseX, mouseY);
+ }
+
+ @Override
+ public int getWidth() {
+ return fr.getStringWidth("8[fPing:f00ms8]");
+ }
+
+ @Override
+ public int getHeight() {
+ return fr.FONT_HEIGHT;
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/PlayerHead.java b/src/minecraft/animeware/hud/mod/Mods/PlayerHead.java
new file mode 100644
index 0000000..eaf7516
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/PlayerHead.java
@@ -0,0 +1,51 @@
+package animeware.hud.mod.Mods;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.hud.ScreenPosition;
+import animeware.hud.mod.HudMod;
+import animeware.util.render.DrawUtil;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.network.NetworkPlayerInfo;
+import net.minecraft.util.ResourceLocation;
+
+public class PlayerHead extends HudMod {
+
+ public PlayerHead() {
+ super("PlayerHead", "Face of your skin", new ResourceLocation("Animeware/icons/placeholder.png"), 85, 5);
+ // TODO Auto-generated constructor stub
+ }
+
+ @Override
+ public int getWidth() {
+ return 20;
+ }
+
+ @Override
+ public int getHeight() {
+ return 20;
+ }
+
+ @Override
+ public void draw() {
+ NetworkPlayerInfo playerInfo = mc.getNetHandler().getPlayerInfo(mc.thePlayer.getUniqueID());
+ if(playerInfo != null) {
+ mc.getTextureManager().bindTexture(playerInfo.getLocationSkin());
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+ Gui.drawScaledCustomSizeModalRect(getX(), getY(), 8F, 8F, 8, 8, 20, 20, 64F, 64F);
+ }
+ }
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ //fr.drawStringWithShadow("8[fFPS:f" + mc.getDebugFPS() + "8]", getX(), getY(), -1);
+ NetworkPlayerInfo playerInfo = mc.getNetHandler().getPlayerInfo(mc.thePlayer.getUniqueID());
+ if(playerInfo != null) {
+ mc.getTextureManager().bindTexture(playerInfo.getLocationSkin());
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+ Gui.drawScaledCustomSizeModalRect(getX(), getY(), 8F, 8F, 8, 8, 20, 20, 64F, 64F);
+ }
+ super.renderDummy(mouseX, mouseY);
+ }
+
+}
+
diff --git a/src/minecraft/animeware/hud/mod/Mods/PotCount.java b/src/minecraft/animeware/hud/mod/Mods/PotCount.java
new file mode 100644
index 0000000..093cf6c
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/PotCount.java
@@ -0,0 +1,66 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+
+import animeware.hud.mod.HudMod;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ResourceLocation;
+
+public class PotCount extends HudMod {
+
+ //ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");
+
+ public PotCount() {
+ super("Pot Counter", "Number of potions in your inventory", new ResourceLocation("Animeware/icons/placeholder.png"), 5, 5);
+ //this.addSettings(color);
+ }
+
+ @Override
+ public int getWidth() {
+ return 20;
+ }
+
+ @Override
+ public int getHeight() {
+ return fr.FONT_HEIGHT;
+ }
+
+ @Override
+ public void draw() {
+ if(this.getRemainingPots() < 1) {
+ fr.drawString(this.getRemainingPots() + "", getX() + 8, getY() + 15, Color.RED.getRGB());
+ } else {
+ fr.drawString(this.getRemainingPots() + "", getX() + 8, getY() + 15, Color.WHITE.getRGB());
+ }
+ this.mc.getRenderItem().renderItemIntoGUI(new ItemStack(Items.potionitem), getX() + 3, getY() - 1);
+
+ }
+
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ if(this.getRemainingPots() < 1) {
+ fr.drawString(this.getRemainingPots() + "", getX() + 8, getY() + 15, Color.RED.getRGB());
+ } else {
+ fr.drawString(this.getRemainingPots() + "", getX() + 8, getY() + 15, Color.WHITE.getRGB());
+ }
+ this.mc.getRenderItem().renderItemIntoGUI(new ItemStack(Items.potionitem), getX() + 3, getY() - 1);
+ super.renderDummy(mouseX, mouseY);
+ }
+
+
+ private int getRemainingPots() {
+ int i = 0;
+
+ for(ItemStack itemstack : this.mc.thePlayer.inventory.mainInventory) {
+ if(itemstack != null && itemstack.getItem().equals(Items.potionitem)) {
+ i += itemstack.stackSize;
+ }
+ }
+
+ return i;
+ }
+
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/PotionStatus.java b/src/minecraft/animeware/hud/mod/Mods/PotionStatus.java
new file mode 100644
index 0000000..a5c4ac0
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/PotionStatus.java
@@ -0,0 +1,95 @@
+package animeware.hud.mod.Mods;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import animeware.hud.mod.HudMod;
+import animeware.util.ChromaString;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.StatCollector;
+
+public class PotionStatus extends HudMod {
+
+ public ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");;
+
+ public PotionStatus() {
+ super("Potion Status", "Active potion effects", new ResourceLocation("Animeware/icons/potionhud.png"), 0, 151);
+ this.addSettings(color);
+ }
+
+ @Override
+ public void draw() {
+
+ Collection activeEffects = mc.thePlayer.getActivePotionEffects();
+
+ if(!activeEffects.isEmpty()) {
+ int yAdd = 0;
+ PotionEffect potionEffect;
+ Potion pe;
+ String potionName = "";
+ String effectDuration = "";
+ for(Iterator toRemove = activeEffects.iterator(); toRemove.hasNext();) {
+ potionEffect = (PotionEffect) toRemove.next();
+ pe = Potion.potionTypes[potionEffect.getPotionID()];
+ potionName = "";
+ potionName = StatCollector.translateToLocal(pe.getName());
+
+ if(potionEffect.getAmplifier() == 1) {
+ potionName = "" + potionName + " II" + "";
+ }else if(potionEffect.getAmplifier() == 2) {
+ potionName ="" + potionName + " III" + "";
+ }else if(potionEffect.getAmplifier() == 3) {
+ potionName = "" + potionName + " IV" + "";
+ }else if(potionEffect.getAmplifier() == 4) {
+ potionName = "" + potionName + " V" + "";
+ }else if(potionEffect.getAmplifier() == 5) {
+ potionName = "" + potionName + " VI" + "";
+ }else if(potionEffect.getAmplifier() == 6) {
+ potionName = "" + potionName + " VIII" + "";
+ }
+
+ effectDuration = Potion.getDurationString(potionEffect);
+
+ if(color.getMode().equals("Blue")) {
+ fr.drawStringWithShadow("8[1" + potionName + " :f " + effectDuration + "8]", getX(), getY() + yAdd, -1);
+ } else if(color.getMode().equals("Cyan")) {
+ fr.drawStringWithShadow("8[b" + potionName + " :f " + effectDuration + "8]", getX(), getY() + yAdd, -1);
+ } else if(color.getMode().equals("Red")) {
+ fr.drawStringWithShadow("8[4" + potionName + " :f " + effectDuration + "8]", getX(), getY() + yAdd, -1);
+ } else if(color.getMode().equals("Purple")) {
+ fr.drawStringWithShadow("8[5" + potionName + " :f " + effectDuration + "8]", getX(), getY() + yAdd, -1);
+ } else if(color.getMode().equals("Chroma")) {
+ ChromaString.drawChromaString("[" + potionName + " : " + effectDuration + "]", getX(), getY() + yAdd, -1);
+ } else if(color.getMode().equals("White")) {
+ fr.drawString("[" + potionName + " : " + effectDuration + "]", getX(), getY() + yAdd, -1);
+ }
+
+ yAdd = yAdd + 15;
+ }
+ }
+
+ super.draw();
+ }
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+
+ fr.drawString("Jump Boost" + " : " + "0:45", getX(), getY(), -1);
+ fr.drawString("Speed" + " : " + "0:45", getX(), getY() + 15, -1);
+ fr.drawString("Invisibility" + " : " + "0:30", getX(), getY() + 30, -1);
+ super.renderDummy(mouseX, mouseY);
+ }
+
+ @Override
+ public int getWidth() {
+ return 95;
+ }
+
+ @Override
+ public int getHeight() {
+ return 38;
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/hud/mod/Mods/ReachDisplayMod.java b/src/minecraft/animeware/hud/mod/Mods/ReachDisplayMod.java
new file mode 100644
index 0000000..664d1c6
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/ReachDisplayMod.java
@@ -0,0 +1,158 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+import java.text.DecimalFormat;
+
+import animeware.event.EventTarget;
+import animeware.event.impl.AttackEntityEvent;
+import animeware.event.impl.ClientTick;
+import animeware.hud.mod.HudMod;
+import animeware.util.ChromaString;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.Vec3;
+
+public class ReachDisplayMod extends HudMod {
+
+ public ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");;
+
+ public ReachDisplayMod() {
+ super("ReachDisplay", "Displays distance from enemy", new ResourceLocation("Animeware/icons/glacier/reach.png"), 0, 101);
+ this.addSettings(color);
+ }
+
+ String ReachDisplay = "";
+ private long lastAttack;
+ private boolean enabled = true;
+ private int decimals;
+
+ @Override
+ public int getWidth()
+ {
+ return fr.getStringWidth("[0 blocks]");
+
+ }
+
+ @Override
+ public int getHeight()
+ {
+ return this.fr.FONT_HEIGHT;
+ }
+
+ @Override
+ public void draw()
+ {
+ //if(mc.gameSettings.keyBindAttack.isKeyDown()) {
+
+ final Vec3 vec3 = this.mc.getRenderViewEntity().getPositionEyes(1.0F);
+ double hitRange = this.mc.objectMouseOver.hitVec.distanceTo(vec3);
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+
+ if(color.getMode().equals("Blue")) {
+ if(mc.gameSettings.keyBindAttack.isKeyDown()) {
+ this.fr.drawString("8[f" + this.getFormatter().format(hitRange) + " 1blocks8]", getX(),getY(), -1, false);
+
+ //this.lastAttack = System.nanoTime() + 100;
+ this.lastAttack = System.currentTimeMillis() + 10;
+ } else {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ this.fr.drawString("8[f0 1blocks8]", getX(),getY(), -1, false);
+
+ }
+ } else if(color.getMode().equals("Cyan")) {
+ if(mc.gameSettings.keyBindAttack.isKeyDown()) {
+ this.fr.drawString("8[f" + this.getFormatter().format(hitRange) + " bblocks8]", getX(),getY(), -1, false);
+
+ //this.lastAttack = System.nanoTime() + 100;
+ this.lastAttack = System.currentTimeMillis() + 10;
+ } else {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ this.fr.drawString("8[f0 bblocks8]", getX(),getY(), -1, false);
+
+ }
+ } else if(color.getMode().equals("Red")) {
+ if(mc.gameSettings.keyBindAttack.isKeyDown()) {
+ this.fr.drawString("8[f" + this.getFormatter().format(hitRange) + " 4blocks8]", getX(),getY(), -1, false);
+
+ //this.lastAttack = System.nanoTime() + 100;
+ this.lastAttack = System.currentTimeMillis() + 10;
+ } else {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ this.fr.drawString("8[f0 4blocks8]", getX(),getY(), -1, false);
+
+ }
+ } else if(color.getMode().equals("Purple")) {
+ if(mc.gameSettings.keyBindAttack.isKeyDown()) {
+ this.fr.drawString("8[f" + this.getFormatter().format(hitRange) + " 5blocks8]", getX(),getY(), -1, false);
+
+ //this.lastAttack = System.nanoTime() + 100;
+ this.lastAttack = System.currentTimeMillis() + 10;
+ } else {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ this.fr.drawString("8[f0 5blocks8]", getX(),getY(), -1, false);
+
+ }
+ } else if(color.getMode().equals("Chroma")) {
+ if(mc.gameSettings.keyBindAttack.isKeyDown()) {
+ ChromaString.drawChromaString("[" + this.getFormatter().format(hitRange) + " blocks]", getX(),getY(), -1);
+
+ //this.lastAttack = System.nanoTime() + 100;
+ this.lastAttack = System.currentTimeMillis() + 10;
+ } else {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ ChromaString.drawChromaString("[0 blocks]", getX(),getY(), -1);
+
+ }
+ } else if(color.getMode().equals("White")) {
+ if(mc.gameSettings.keyBindAttack.isKeyDown()) {
+ this.fr.drawStringWithShadow("[" + this.getFormatter().format(hitRange) + " blocks]", getX(),getY(), -1);
+ this.lastAttack = System.currentTimeMillis() + 10;
+ } else {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ this.fr.drawStringWithShadow("[0 blocks]", getX(),getY(), -1);
+ }
+ }
+ //this.lastAttack = System.nanoTime() + 100;
+
+
+ //}
+ }
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ fr.drawStringWithShadow("[2 blocks]", getX(), getY(), -1);
+
+ super.renderDummy(mouseX, mouseY);
+ }
+
+ @EventTarget
+ public void onHit(AttackEntityEvent event)
+ {
+ final Vec3 vec3 = this.mc.getRenderViewEntity().getPositionEyes(1.0F);
+ double hitRange = this.mc.objectMouseOver.hitVec.distanceTo(vec3);
+
+ ReachDisplay = this.getFormatter().format(hitRange) + " blocks";
+
+ this.lastAttack = System.nanoTime();
+ }
+
+ private DecimalFormat getFormatter()
+ {
+ StringBuilder format = new StringBuilder("0");
+ for (int i = 0; this.decimals > i; i++)
+ {
+ format.append('0');
+ }
+ return new DecimalFormat(format.toString());
+ }
+
+ @EventTarget
+ public void onTick(ClientTick event)
+ {
+ if (System.nanoTime() - this.lastAttack >= 2.0E9 && this.enabled)
+ {
+ ReachDisplay = "Hasn't attacked";
+ }
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/ScrollZoom.java b/src/minecraft/animeware/hud/mod/Mods/ScrollZoom.java
new file mode 100644
index 0000000..998963e
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/ScrollZoom.java
@@ -0,0 +1,32 @@
+package animeware.hud.mod.Mods;
+
+import animeware.cosmetic.Booleans;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class ScrollZoom extends HudMod {
+
+ public ScrollZoom() {
+ super("ScrollZoom", "Multiplies zoom by scrolling", new ResourceLocation("Animeware/icons/search.png"), 0, 0);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.ScrollZoom = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.ScrollZoom = false;
+ //super.onDisable();
+ }
+ @Override
+ public int getWidth() {
+ return 0;
+ }
+
+ @Override
+ public int getHeight() {
+ return 0;
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/ServerIP.java b/src/minecraft/animeware/hud/mod/Mods/ServerIP.java
new file mode 100644
index 0000000..8303f95
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/ServerIP.java
@@ -0,0 +1,68 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+
+import animeware.hud.mod.HudMod;
+import animeware.util.ChromaString;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+
+public class ServerIP extends HudMod{
+
+ public ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");;
+
+ public ServerIP() {
+ super("ServerIP", "Displays server ip", new ResourceLocation("Animeware/icons/servers.png"), 0, 21);
+ this.addSettings(color);
+ }
+
+ @Override
+ public void draw() {
+ String address = "Singleplayer";
+ if( Minecraft.getMinecraft().getCurrentServerData() != null) {
+ address = Minecraft.getMinecraft().getCurrentServerData().serverIP;
+ }
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+
+ if(color.getMode().equals("Blue")) {
+ fr.drawStringWithShadow("8[1IP:f" + address + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Cyan")) {
+ fr.drawStringWithShadow("8[bIP:f" + address + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Red")) {
+ fr.drawStringWithShadow("8[4IP:f" + address + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Purple")) {
+ fr.drawStringWithShadow("8[5IP:f" + address + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Chroma")) {
+ ChromaString.drawChromaString("[IP:" + address + "]", getX(), getY(), -1);
+ } else if(color.getMode().equals("White")) {
+ fr.drawStringWithShadow("8[fIP:f" + address + "8]", getX(), getY(), -1);
+ }
+ super.draw();
+ }
+
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ fr.drawStringWithShadow("8[fIP:fhypixel.net8]", getX(), getY(), -1);
+
+ super.renderDummy(mouseX, mouseY);
+ }
+
+ @Override
+ public int getWidth() {
+ String address = "Singleplayer";
+ if( Minecraft.getMinecraft().getCurrentServerData() != null) {
+ address = Minecraft.getMinecraft().getCurrentServerData().serverIP;
+ }
+ return fr.getStringWidth("8[fIP:f" + address + "8]");
+ }
+
+ @Override
+ public int getHeight() {
+ return fr.FONT_HEIGHT;
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/SmallSword.java b/src/minecraft/animeware/hud/mod/Mods/SmallSword.java
new file mode 100644
index 0000000..9313b0d
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/SmallSword.java
@@ -0,0 +1,23 @@
+package animeware.hud.mod.Mods;
+
+import animeware.cosmetic.Booleans;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class SmallSword extends HudMod {
+
+ public SmallSword() {
+ super("SmallSword", "Makes held items small", new ResourceLocation("Animeware/icons/placeholder.png"), 0, 0);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.SmallSword = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.SmallSword = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/SwordSpin.java b/src/minecraft/animeware/hud/mod/Mods/SwordSpin.java
new file mode 100644
index 0000000..7583e55
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/SwordSpin.java
@@ -0,0 +1,23 @@
+package animeware.hud.mod.Mods;
+
+import animeware.cosmetic.Booleans;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class SwordSpin extends HudMod {
+
+ public SwordSpin() {
+ super("SwordSpin", "Spins your sword while blocking", new ResourceLocation("Animeware/icons/placeholder.png"), 0, 0);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.SwordSpin = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.SwordSpin = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/TNTTimer.java b/src/minecraft/animeware/hud/mod/Mods/TNTTimer.java
new file mode 100644
index 0000000..160e057
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/TNTTimer.java
@@ -0,0 +1,32 @@
+package animeware.hud.mod.Mods;
+
+import animeware.cosmetic.Booleans;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class TNTTimer extends HudMod {
+
+ public TNTTimer() {
+ super("TNTTimer", "Displays time until TNT explodes", new ResourceLocation("Animeware/icons/timedisplay.png"), 0, 0);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.TNTTimer = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.TNTTimer = false;
+ //super.onDisable();
+ }
+ @Override
+ public int getWidth() {
+ return 0;
+ }
+
+ @Override
+ public int getHeight() {
+ return 0;
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/TargetHUD.java b/src/minecraft/animeware/hud/mod/Mods/TargetHUD.java
new file mode 100644
index 0000000..417dbac
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/TargetHUD.java
@@ -0,0 +1,125 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+
+import animeware.hud.mod.HudMod;
+import animeware.util.ChromaString;
+import animeware.util.render.RoundedUtils;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.client.gui.inventory.GuiInventory;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.util.ResourceLocation;
+
+public class TargetHUD extends HudMod {
+
+ EntityLivingBase target;
+
+ private Color healthColor;
+ private int healthRect;
+
+ //public BooleanSetting Test = new BooleanSetting("Test", false);
+
+ public ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");;
+
+ public TargetHUD() {
+ super("TargetHUD", "Enemy health", new ResourceLocation("Animeware/icons/placeholder.png"), 450, 120);
+ this.addSettings(color);
+ }
+
+ @Override
+ public void draw() {
+ tenderTargetHud();
+
+ super.draw();
+ }
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ RoundedUtils.drawSmoothRoundedRect(getX(), getY(), getX() + getWidth(), getY() + getHeight(), 7,new Color(0, 0, 0, 170).getRGB());
+ fr.drawStringWithShadow("TargetName", getX() + 2, getY() + 2, -1);
+ fr.drawStringWithShadow("10 \u2764", getX() + 2, getY() + 2 + fr.FONT_HEIGHT, -1);
+
+ super.renderDummy(mouseX, mouseY);
+ }
+
+ @Override
+ public int getWidth() {
+ return 62;
+ }
+
+ @Override
+ public int getHeight() {
+ return fr.FONT_HEIGHT * 2 + 4;
+ }
+
+
+ private void tenderTargetHud() {
+ target = (EntityLivingBase) mc.pointedEntity;
+
+ if(target !=null) {
+ RoundedUtils.drawSmoothRoundedRect(getX() - 20, getY(), getX() + getWidth(), getY() + getHeight() + 3, 7,new Color(0, 0, 0, 170).getRGB());
+ if(color.getMode().equals("Blue")) {
+ fr.drawStringWithShadow("1" + target.getName(), getX() + 2, getY() + 2, -1);
+ fr.drawStringWithShadow((int)target.getHealth() + " \u2764", getX() + 2, getY() + 2 + fr.FONT_HEIGHT, -1);
+ } else if(color.getMode().equals("Cyan")) {
+ fr.drawStringWithShadow("b" + target.getName(), getX() + 2, getY() + 2, -1);
+ fr.drawStringWithShadow((int)target.getHealth() + " \u2764", getX() + 2, getY() + 2 + fr.FONT_HEIGHT, -1);
+ } else if(color.getMode().equals("Red")) {
+ fr.drawStringWithShadow("4" + target.getName(), getX() + 2, getY() + 2, -1);
+ fr.drawStringWithShadow((int)target.getHealth() + " \u2764", getX() + 2, getY() + 2 + fr.FONT_HEIGHT, -1);
+ } else if(color.getMode().equals("Purple")) {
+ fr.drawStringWithShadow("5" + target.getName(), getX() + 2, getY() + 2, -1);
+ fr.drawStringWithShadow((int)target.getHealth() + " \u2764", getX() + 2, getY() + 2 + fr.FONT_HEIGHT, -1);
+ } else if(color.getMode().equals("Chroma")) {
+ ChromaString.drawChromaString(target.getName(), getX() + 2, getY() + 2, -1);
+ ChromaString.drawChromaString((int)target.getHealth() + " \u2764", getX() + 2, getY() + 2 + fr.FONT_HEIGHT, -1);
+ } else if(color.getMode().equals("White")) {
+ fr.drawStringWithShadow(target.getName(), getX() + 2, getY() + 2, -1);
+ fr.drawStringWithShadow((int)target.getHealth() + " \u2764", getX() + 2, getY() + 2 + fr.FONT_HEIGHT, -1);
+ }
+ GuiInventory.drawEntityOnScreen(getX() - 8, getY() + 22, 10, 50, 50, target);
+ drawEntityHealth();
+ /*mc.getRenderItem().renderItemAndEffectIntoGUI(target.getCurrentArmor(3), getX() + 45, getY() + 30);
+ mc.getRenderItem().renderItemAndEffectIntoGUI(target.getCurrentArmor(2), getX() + 60, getY() + 30);
+ mc.getRenderItem().renderItemAndEffectIntoGUI(target.getCurrentArmor(1), getX() + 75, getY() + 30);
+ mc.getRenderItem().renderItemAndEffectIntoGUI(target.getCurrentArmor(0), getX() + 90, getY() + 30);*/
+
+ //Gui.drawScaledCustomSizeModalRect(330, 365, 8F, 8F, 8, 8, 20, 20, 64F, 64F);
+ }
+ }
+ private void drawEntityHealth() {
+ EntityLivingBase currentTarget = (EntityLivingBase) this.mc.pointedEntity;
+
+ if(currentTarget.getHealth() >= currentTarget.getMaxHealth()) {
+ healthColor = new Color(0, 255, 0, 255);
+ healthRect = 55;
+ } else if (currentTarget.getHealth() >= 17) {
+ healthColor = new Color(255, 242, 0, 255);
+ healthRect = 45;
+ } else if (currentTarget.getHealth() >= 14) {
+ healthColor = new Color(173, 117, 3, 255);
+ healthRect = 35;
+ } else if (currentTarget.getHealth() >= 11) {
+ healthColor = new Color(173, 80, 3, 255);
+ healthRect = 25;
+ } else if (currentTarget.getHealth() >= 8) {
+ healthColor = new Color(173, 80, 3, 255);
+ healthRect = 15;
+ } else if (currentTarget.getHealth() >= 5) {
+ healthColor = new Color(184, 43, 0, 255);
+ healthRect = 5;
+ } else if (currentTarget.getHealth() <= 2) {
+ healthColor = new Color(255, 0, 0, 255);
+ healthRect = 0;
+ }else if (currentTarget.getHealth() <= 0) {
+ healthColor = new Color(255, 0, 0, 255);
+ healthRect = 0;
+ }
+
+ //Gui.drawRect(getX() + 77, getY(), getX() + 79, getY() + getHeight(), healthColor.getRGB());
+ //154
+ RoundedUtils.drawSmoothRoundedRect(getX() + 3, getY() + 21, getX() + healthRect + 3, getY() + 23, 2, healthColor.getRGB());
+
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/TimeChanger.java b/src/minecraft/animeware/hud/mod/Mods/TimeChanger.java
new file mode 100644
index 0000000..e20d9df
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/TimeChanger.java
@@ -0,0 +1,32 @@
+package animeware.hud.mod.Mods;
+
+import animeware.cosmetic.Booleans;
+import animeware.event.EventTarget;
+import animeware.event.impl.EventUpdate;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class TimeChanger extends HudMod {
+
+ public TimeChanger() {
+ super("TimeChanger", "Changes world time", new ResourceLocation("Animeware/icons/glacier/timechanger.png"), 0, 0);
+ }
+
+ @Override
+ public void onEnable() {
+
+
+
+
+ Booleans.timechanger = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ //mc.thePlayer.setSprinting(false);
+
+ Booleans.timechanger = false;
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/TimeMod.java b/src/minecraft/animeware/hud/mod/Mods/TimeMod.java
new file mode 100644
index 0000000..996a556
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/TimeMod.java
@@ -0,0 +1,79 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+
+import animeware.hud.mod.HudMod;
+import animeware.util.ChromaString;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+
+public class TimeMod extends HudMod {
+
+ public ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");;
+
+ public TimeMod() {
+ super("TimeMod", "Displays real time", new ResourceLocation("Animeware/icons/timedisplay.png"), 0, 61);
+ this.addSettings(color);
+ }
+
+ @Override
+ public void draw() {
+
+ DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm");
+ LocalTime localTime = LocalTime.now();
+ String time = dtf.format(localTime);
+ //Minecraft.getMinecraft().fontRendererObj.drawString(time, getX(), getY(), -1);
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ if(color.getMode().equals("Blue")) {
+ fr.drawStringWithShadow("8[1" + time + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Cyan")) {
+ fr.drawStringWithShadow("8[b" + time + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Red")) {
+ fr.drawStringWithShadow("8[4" + time + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Purple")) {
+ fr.drawStringWithShadow("8[5" + time + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Chroma")) {
+ ChromaString.drawChromaString("[" + time + "]", getX(), getY(), -1);
+ } else if(color.getMode().equals("White")) {
+ fr.drawStringWithShadow("8[f" + time + "8]", getX(), getY(), -1);
+ }
+
+ }
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm");
+ LocalTime localTime = LocalTime.now();
+ String time = dtf.format(localTime);
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ if(color.getMode().equals("Blue")) {
+ fr.drawStringWithShadow("8[1" + time + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Cyan")) {
+ fr.drawStringWithShadow("8[b" + time + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Red")) {
+ fr.drawStringWithShadow("8[4" + time + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Purple")) {
+ fr.drawStringWithShadow("8[5" + time + "8]", getX(), getY(), -1);
+ } else if(color.getMode().equals("Chroma")) {
+ ChromaString.drawChromaString("[" + time + "]", getX(), getY(), -1);
+ } else if(color.getMode().equals("White")) {
+ fr.drawStringWithShadow("8[f" + time + "8]", getX(), getY(), -1);
+ }
+ super.renderDummy(mouseX, mouseY);
+ }
+
+ @Override
+ public int getWidth() {
+ DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm");
+ LocalTime localTime = LocalTime.now();
+ String time = dtf.format(localTime);
+ return fr.getStringWidth("8[f" + time + "8]");
+ }
+
+ @Override
+ public int getHeight() {
+ return 10;
+ }
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/ToggleSprint3.java b/src/minecraft/animeware/hud/mod/Mods/ToggleSprint3.java
new file mode 100644
index 0000000..1b37d27
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/ToggleSprint3.java
@@ -0,0 +1,77 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+
+import animeware.event.EventTarget;
+import animeware.event.impl.EventUpdate;
+import animeware.hud.Category;
+import animeware.hud.mod.HudMod;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+
+public class ToggleSprint3 extends HudMod {
+ float prevGamma = mc.gameSettings.gammaSetting;
+
+ boolean sprintingToggle = false;
+ boolean startup = true;
+
+ public ToggleSprint3() {
+ super("ToggleSprint", "Toggles sprinting", new ResourceLocation("Animeware/icons/togglesprint.png"), 0, 81);
+ }
+
+ public void onDisable() {
+ //if(startup == false)
+ //mc.thePlayer.setSprinting(false);
+ super.onDisable();
+ }
+
+ @EventTarget
+ public void update(EventUpdate e) {
+ if (mc.gameSettings.keyBindSprint.isPressed())
+ this.sprintingToggle = !this.sprintingToggle;
+ if (this.sprintingToggle &&
+ !this.mc.thePlayer.isOnLadder() && mc.gameSettings.keyBindForward.isKeyDown() && !this.mc.thePlayer.isCollidedHorizontally && !this.mc.thePlayer.isBlocking() && !this.mc.thePlayer.isSneaking())
+ this.mc.thePlayer.setSprinting(true);
+ }
+
+ @Override
+ public void draw() {
+ startup = true;
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ String state = "(Standing)";
+ //Gui.drawRect(this.x, this.y, this.x + this.w, this.y + this.h, -2147483648);
+ if (this.mc.thePlayer.isSprinting() && !this.sprintingToggle && this.mc.gameSettings.keyBindForward.isKeyDown()) {
+ state = "(Vanilla)";
+ }
+ else if(this.sprintingToggle && this.mc.gameSettings.keyBindForward.isKeyDown()) {
+ state = "(Toggled)";
+ }
+ else if(!this.mc.thePlayer.isSprinting() && !this.mc.gameSettings.keyBindForward.isKeyDown()) {
+ state = "(Standing)";
+ }
+ else if(!this.sprintingToggle && this.mc.gameSettings.keyBindForward.isKeyDown()) {
+ state = "(Walking)";
+ }
+
+ fr.drawStringWithShadow("[Sprinting " + state + "]", getX(), getY(), -1);
+ //super.draw();
+ }
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ fr.drawStringWithShadow("[Sprinting (Toggled)]", getX(), getY(), -1);
+ super.renderDummy(mouseX, mouseY);
+ }
+ @Override
+ public int getWidth() {
+ return fr.getStringWidth("[Sprinting (Toggled)]");
+
+
+ }
+
+ @Override
+ public int getHeight() {
+ return fr.FONT_HEIGHT;
+ }
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/Watermark.java b/src/minecraft/animeware/hud/mod/Mods/Watermark.java
new file mode 100644
index 0000000..d017b66
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/Watermark.java
@@ -0,0 +1,32 @@
+package animeware.hud.mod.Mods;
+
+import animeware.cosmetic.Booleans;
+import animeware.hud.mod.HudMod;
+import net.minecraft.util.ResourceLocation;
+
+public class Watermark extends HudMod {
+
+ public Watermark() {
+ super("Watermark", "Displays client watermark", new ResourceLocation("Animeware/icons/iconWhite.png"), 0, 0);
+ }
+ @Override
+ public void onEnable() {
+ Booleans.watermark = true;
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ Booleans.watermark = false;
+ //super.onDisable();
+ }
+ @Override
+ public int getWidth() {
+ return 0;
+ }
+
+ @Override
+ public int getHeight() {
+ return 0;
+ }
+
+}
diff --git a/src/minecraft/animeware/hud/mod/Mods/WindowedFullscreenMod.java b/src/minecraft/animeware/hud/mod/Mods/WindowedFullscreenMod.java
new file mode 100644
index 0000000..1c13254
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/WindowedFullscreenMod.java
@@ -0,0 +1,46 @@
+package animeware.hud.mod.Mods;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.util.ResourceLocation;
+
+import org.lwjgl.LWJGLException;
+import org.lwjgl.opengl.Display;
+import org.lwjgl.opengl.DisplayMode;
+
+import animeware.event.impl.GameLoopEvent;
+import animeware.hud.mod.HudMod;
+
+
+public class WindowedFullscreenMod extends HudMod {
+ private boolean lastFullscreen;
+
+ public WindowedFullscreenMod() {
+ super("WindowedFullscreen", "Windowed Fullscreen", new ResourceLocation("Animeware/icons/placeholder.png"), 0, 0);
+ }
+
+ public void onTick(GameLoopEvent event) {
+ boolean fullScreenNow = Minecraft.getMinecraft().isFullScreen();
+ if (this.lastFullscreen != fullScreenNow) {
+ this.fullScreen(fullScreenNow);
+ this.lastFullscreen = fullScreenNow;
+ }
+ }
+
+ public void fullScreen(boolean fullscreen) {
+ try {
+ if (fullscreen) {
+ System.setProperty("org.lwjgl.opengl.Window.undecorated", "true");
+ Display.setDisplayMode(Display.getDesktopDisplayMode());
+ Display.setLocation(0, 0);
+ Display.setFullscreen(false);
+ Display.setResizable(false);
+ } else {
+ System.setProperty("org.lwjgl.opengl.Window.undecorated", "false");
+ Display.setDisplayMode(new DisplayMode(Minecraft.getMinecraft().displayWidth, Minecraft.getMinecraft().displayHeight));
+ Display.setResizable(true);
+ }
+ } catch (LWJGLException lwjglexception) {
+ lwjglexception.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/hud/mod/Mods/XYZMod.java b/src/minecraft/animeware/hud/mod/Mods/XYZMod.java
new file mode 100644
index 0000000..5877df2
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Mods/XYZMod.java
@@ -0,0 +1,74 @@
+package animeware.hud.mod.Mods;
+
+import java.awt.Color;
+
+import animeware.hud.ScreenPosition;
+import animeware.hud.mod.HudMod;
+import animeware.util.ChromaString;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+
+public class XYZMod extends HudMod {
+
+ public ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");;
+
+ public XYZMod() {
+ super("XYZMod", "Displays coordinates", new ResourceLocation("Animeware/icons/coordinates.png"), 0, 111);
+ this.addSettings(color);
+ }
+
+ private ScreenPosition position;
+ private Color background = new Color(45, 45, 45, 180);
+
+ @Override
+ public void draw() {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ if(color.getMode().equals("Blue")) {
+ fr.drawStringWithShadow("1X:f" + (int) this.mc.getRenderViewEntity().posX, getX(), getY(), -1);
+ fr.drawStringWithShadow("1Y:f" + (int) this.mc.getRenderViewEntity().posY, getX(), getY() + 10, -1);
+ fr.drawStringWithShadow("1Z:f" + (int) this.mc.getRenderViewEntity().posZ, getX(), getY() + 20, -1);
+ } else if(color.getMode().equals("Cyan")) {
+ fr.drawStringWithShadow("bX:f" + (int) this.mc.getRenderViewEntity().posX, getX(), getY(), -1);
+ fr.drawStringWithShadow("bY:f" + (int) this.mc.getRenderViewEntity().posY, getX(), getY() + 10, -1);
+ fr.drawStringWithShadow("bZ:f" + (int) this.mc.getRenderViewEntity().posZ, getX(), getY() + 20, -1);
+ } else if(color.getMode().equals("Red")) {
+ fr.drawStringWithShadow("4X:f" + (int) this.mc.getRenderViewEntity().posX, getX(), getY(), -1);
+ fr.drawStringWithShadow("4Y:f" + (int) this.mc.getRenderViewEntity().posY, getX(), getY() + 10, -1);
+ fr.drawStringWithShadow("4Z:f" + (int) this.mc.getRenderViewEntity().posZ, getX(), getY() + 20, -1);
+ } else if(color.getMode().equals("Purple")) {
+ fr.drawStringWithShadow("5X:f" + (int) this.mc.getRenderViewEntity().posX, getX(), getY(), -1);
+ fr.drawStringWithShadow("5Y:f" + (int) this.mc.getRenderViewEntity().posY, getX(), getY() + 10, -1);
+ fr.drawStringWithShadow("5Z:f" + (int) this.mc.getRenderViewEntity().posZ, getX(), getY() + 20, -1);
+ } else if(color.getMode().equals("Chroma")) {
+ ChromaString.drawChromaString("X:" + (int) this.mc.getRenderViewEntity().posX, getX(), getY(), -1);
+ ChromaString.drawChromaString("Y:" + (int) this.mc.getRenderViewEntity().posY, getX(), getY() + 10, -1);
+ ChromaString.drawChromaString("Z:" + (int) this.mc.getRenderViewEntity().posZ, getX(), getY() + 20, -1);
+ } else if(color.getMode().equals("White")) {
+ fr.drawStringWithShadow("X:" + (int) this.mc.getRenderViewEntity().posX, getX(), getY(), -1);
+ fr.drawStringWithShadow("Y:" + (int) this.mc.getRenderViewEntity().posY, getX(), getY() + 10, -1);
+ fr.drawStringWithShadow("Z:" + (int) this.mc.getRenderViewEntity().posZ, getX(), getY() + 20, -1);
+ }
+
+ super.draw();
+ }
+
+ @Override
+ public void renderDummy(int mouseX, int mouseY) {
+ Gui.drawRect(getX() - 2, getY() - 2, getX() + getWidth(), getY() + getHeight(), new Color(0, 0, 0, 170).getRGB());
+ fr.drawStringWithShadow("X:000", getX(), getY(), -1);
+ fr.drawStringWithShadow("Y:000", getX(), getY() + 10, -1);
+ fr.drawStringWithShadow("Z:000", getX(), getY() + 20, -1);
+ super.renderDummy(mouseX, mouseY);
+ }
+
+ @Override
+ public int getWidth() {
+ return fr.getStringWidth("8[fFPS:f" + mc.getDebugFPS() + "8]");
+ }
+
+ @Override
+ public int getHeight() {
+ return 30;
+ }
+}
diff --git a/src/minecraft/animeware/hud/mod/Module.java b/src/minecraft/animeware/hud/mod/Module.java
new file mode 100644
index 0000000..d0c1f14
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Module.java
@@ -0,0 +1,142 @@
+package animeware.hud.mod;
+
+import org.lwjgl.input.Mouse;
+
+import animeware.event.EventManager;
+import animeware.hud.Category;
+import animeware.util.MouseUtils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.renderer.GlStateManager;
+
+public class Module {
+ public Minecraft mc = Minecraft.getMinecraft();
+
+ public FontRenderer fr = this.mc.fontRendererObj;
+
+ protected MouseUtils msu = new MouseUtils();
+
+ public String name;
+
+ public String description;
+
+ public boolean state;
+
+ public Category cat;
+
+ public float x;
+
+ public float y;
+
+ public float w;
+
+ public float h;
+
+ public float prog = 0.0F;
+
+ public float anim = 22.0F;
+
+ public float dragY;
+
+ public float dragX;
+
+ private boolean drag;
+
+ public Module(String name, String description, Category cat, float x, float y, float w, float h) {
+ this.name = name;
+ this.description = description;
+ this.cat = cat;
+ this.x = x;
+ this.y = y;
+ this.w = w;
+ this.h = h;
+ }
+
+ public void onEnable() {
+ EventManager.register(this);
+ }
+
+ public void onDisable() {
+ EventManager.unregister(this);
+ }
+
+ public void toggle() {
+ this.state = !this.state;
+ if (this.state) {
+ onEnable();
+ } else {
+ onDisable();
+ }
+ }
+
+ public boolean hovered(int mouseX, int mouseY) {
+ return (mouseX >= getX() + 0.5D && mouseX <= getX() + getW() - 0.5F && mouseY >= getY() + 0.5F && mouseY <= getY() + getH() - 0.5F);
+ }
+
+ public void drag(int mouseX, int mouseY) {
+ boolean hovered = (mouseX >= getX() && mouseX <= getX() + getW() && mouseY >= getY() && mouseY <= getY() + getH());
+ if (!this.drag && Mouse.isButtonDown(0))
+ this.drag = false;
+ if (this.drag) {
+ setX(mouseX + this.dragX);
+ setY(mouseY + this.dragY);
+ if (!Mouse.isButtonDown(0))
+ this.drag = false;
+ }
+ if (hovered && Mouse.isButtonDown(0)) {
+ if (this.x < 0.0F)
+ setX(0.0F);
+ if (this.y < 0.0F)
+ setY(0.0F);
+ if (!this.drag) {
+ this.dragX = this.x - mouseX;
+ this.dragY = this.y - mouseY;
+ this.drag = true;
+ }
+ }
+ }
+
+ public void draw() {
+ GlStateManager.color(1.0F, 1.0F, 1.0F);
+ }
+
+ public float getX() {
+ if (this.x < 0.0F)
+ this.x = 0.0F;
+ return this.x;
+ }
+
+ public void setX(float x) {
+ this.x = x;
+ }
+
+ public float getY() {
+ if (this.y < 0.0F)
+ this.y = 0.0F;
+ return this.y;
+ }
+
+ public void setY(float y) {
+ this.y = y;
+ }
+
+ public float getW() {
+ return this.w;
+ }
+
+ public void setW(float w) {
+ this.w = w;
+ }
+
+ public float getH() {
+ return this.h;
+ }
+
+ public void setH(float h) {
+ this.h = h;
+ }
+
+ public void drawCenteredString(String text, float f, float g, int color) {
+ this.fr.drawStringWithShadow(text, f - (this.fr.getStringWidth(text) / 2), g, color);
+ }
+}
diff --git a/src/minecraft/animeware/hud/mod/Side.java b/src/minecraft/animeware/hud/mod/Side.java
new file mode 100644
index 0000000..d85fba7
--- /dev/null
+++ b/src/minecraft/animeware/hud/mod/Side.java
@@ -0,0 +1,9 @@
+package animeware.hud.mod;
+
+public enum Side {
+
+ LEFT,
+ RIGHT,
+ CLIENT;
+
+}
diff --git a/src/minecraft/animeware/login/User.java b/src/minecraft/animeware/login/User.java
new file mode 100644
index 0000000..35583e8
--- /dev/null
+++ b/src/minecraft/animeware/login/User.java
@@ -0,0 +1,41 @@
+package animeware.login;
+
+public class User {
+
+ public String name, password, hwid, discord;
+ public boolean staff, banned;
+
+ public User(String name, String password, boolean staff, boolean banned, String hwid, String discord) {
+ this.name = name;
+ this.password = password;
+ this.staff = staff;
+ this.banned = banned;
+ this.hwid = hwid;
+ this.discord = discord;
+ }
+
+ public String getDiscord() {
+ return discord;
+ }
+
+ public String getHwid() {
+ return hwid;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public boolean isStaff() {
+ return staff;
+ }
+
+ public boolean isBanned() {
+ return banned;
+ }
+
+}
diff --git a/src/minecraft/animeware/login/UserChecker.java b/src/minecraft/animeware/login/UserChecker.java
new file mode 100644
index 0000000..fdb226d
--- /dev/null
+++ b/src/minecraft/animeware/login/UserChecker.java
@@ -0,0 +1,23 @@
+package animeware.login;
+
+import animeware.NightSky;
+import animeware.util.backend.AntiCheat;
+
+public class UserChecker {
+
+
+ public boolean isUser() {
+ String hwid = AntiCheat.getHWID();
+
+ for(User u : NightSky.getInstance().getUsers().getUsers()) {
+ if(u.getHwid() == hwid) {
+ return true;
+ }
+ else return false;
+ }
+ return false;
+
+ }
+
+
+}
diff --git a/src/minecraft/animeware/login/Users.java b/src/minecraft/animeware/login/Users.java
new file mode 100644
index 0000000..ced5e17
--- /dev/null
+++ b/src/minecraft/animeware/login/Users.java
@@ -0,0 +1,17 @@
+package animeware.login;
+
+import java.util.ArrayList;
+
+public class Users {
+
+ public ArrayList users = new ArrayList();
+
+ public ArrayList getUsers() {
+ return users;
+ }
+
+ public void addUsers() {
+ users.add(new User("hypnomacka", "isVeryCool69", true, false, "none", "hypnomacka#4765"));
+ }
+
+}
diff --git a/src/minecraft/animeware/ui/CosmeticGUI.java b/src/minecraft/animeware/ui/CosmeticGUI.java
new file mode 100644
index 0000000..19e0067
--- /dev/null
+++ b/src/minecraft/animeware/ui/CosmeticGUI.java
@@ -0,0 +1,503 @@
+package animeware.ui;
+
+import java.awt.Color;
+import java.awt.Desktop;
+import java.io.IOException;
+import java.net.URI;
+import java.util.ArrayList;
+
+import org.lwjgl.input.Mouse;
+import org.lwjgl.opengl.GL11;
+
+import animeware.NightSky;
+import animeware.cosmetic.CosmeticModule;
+import animeware.gui.clickgui.GUITheme;
+import animeware.gui.clickgui.GUIType;
+import animeware.hud.HUDConfigScreen;
+import animeware.hud.mod.HudMod;
+import animeware.ui.comp.CosmeticButton;
+import animeware.ui.comp.clickgui.ModButton;
+import animeware.ui.comp.clickgui.SettingButton;
+import animeware.ui.themes.impl.ThemeButton;
+import animeware.util.render.ColorMode;
+import animeware.util.render.RenderUtil;
+import animeware.util.render.ui.ClickGUIUtil;
+import net.arikia.dev.drpc.DiscordUser;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.network.NetworkPlayerInfo;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.OpenGlHelper;
+import net.minecraft.client.renderer.RenderHelper;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.entity.RenderManager;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.util.ResourceLocation;
+
+public class CosmeticGUI extends GuiScreen {
+
+ public boolean isCGOn = false;
+ public boolean cgon;
+
+ private int field_146445_a;
+ private int field_146444_f;
+
+ float anim = 0.0F;
+
+ private float currentScroll;
+
+ HudMod m;
+
+ public static boolean settings;
+
+ private static String TntTime = "TntTimer";
+
+ public int x, y, w, h;
+
+ ArrayList cosButtons = new ArrayList<>();
+ ArrayList modButtons = new ArrayList<>();
+ ArrayList tButtons = new ArrayList<>();
+ ArrayList settingButtons = new ArrayList<>();
+
+ public static GUIType type = GUIType.CLICK;
+ public static GUITheme theme = GUITheme.DARK;
+
+ public void checkMouseWheel(int mouseX, int mouseY) {
+ int mouseScroll = Mouse.getDWheel();
+ if(mouseScroll > 0) {
+ for(ModButton b : modButtons) {
+ b.y += 15;
+ }
+ } else if(mouseScroll < 0) {
+ for(ModButton b : modButtons) {
+ b.y -= 15;
+ }
+ }
+ }
+ public void checkMouseWheelCosmetic(int mouseX, int mouseY) {
+ int mouseScrollCos = Mouse.getDWheel();
+ if(mouseScrollCos > 0) {
+ for(CosmeticButton b : cosButtons) {
+ b.y += 15;
+ }
+ } else if(mouseScrollCos < 0) {
+ for(CosmeticButton b : cosButtons) {
+ b.y -= 15;
+ }
+ }
+ }
+
+ @Override
+ public void initGui() {
+ super.initGui();
+ mc.entityRenderer.loadShader(new ResourceLocation("Animeware/blur.json"));
+ this.anim = 80.0F;
+ super.initGui();
+ this.field_146445_a = 0;
+ this.buttonList.clear();
+ int i = -16;
+ int j = 98;
+
+
+ /*this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 165, 323, 35, NightSky.INSTANCE.cosManager.darkCape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 205, 323, 35, NightSky.INSTANCE.cosManager.deamoneyes));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 245, 323, 35, NightSky.INSTANCE.cosManager.deamoneyes2));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 285, 323, 35, NightSky.INSTANCE.cosManager.ecape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 325, 323, 35, NightSky.INSTANCE.cosManager.gblack));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 365, 323, 35, NightSky.INSTANCE.cosManager.gblue));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 405, 323, 35, NightSky.INSTANCE.cosManager.ggreen));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 445, 323, 35, NightSky.INSTANCE.cosManager.gpurple));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 485, 323, 35, NightSky.INSTANCE.cosManager.gred));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 525, 323, 35, NightSky.INSTANCE.cosManager.kcape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 565, 323, 35, NightSky.INSTANCE.cosManager.kcape2));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 605, 323, 35, NightSky.INSTANCE.cosManager.lcape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 645, 323, 35, NightSky.INSTANCE.cosManager.ncape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 685, 323, 35, NightSky.INSTANCE.cosManager.pcape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 725, 323, 35, NightSky.INSTANCE.cosManager.quavcape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 765, 323, 35, NightSky.INSTANCE.cosManager.quickcape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 805, 323, 35, NightSky.INSTANCE.cosManager.rcape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 845, 323, 35, NightSky.INSTANCE.cosManager.scape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 885, 323, 35, NightSky.INSTANCE.cosManager.tcape));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 925, 323, 35, NightSky.INSTANCE.cosManager.sofyt));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 965, 323, 35, NightSky.INSTANCE.cosManager.sofyt2));
+
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 1005, 323, 35, NightSky.INSTANCE.cosManager.dwings));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 1045, 323, 35, NightSky.INSTANCE.cosManager.gwings));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 1085, 323, 35, NightSky.INSTANCE.cosManager.cwings));
+
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 1125, 323, 35, NightSky.INSTANCE.cosManager.eggs));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 1165, 323, 35, NightSky.INSTANCE.cosManager.witchhat));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 1205, 323, 35, NightSky.INSTANCE.cosManager.glasses));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 1245, 323, 35, NightSky.INSTANCE.cosManager.halo));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 1285, 323, 35, NightSky.INSTANCE.cosManager.retardeyes));
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 161, 1325, 323, 35, NightSky.INSTANCE.cosManager.blaze));*/
+
+ int countCosmetic = 40;
+ for(CosmeticModule m : NightSky.INSTANCE.cosManager.cosmetics) {
+ if(m.name == "Owner Cape" || m.name == "Staff Cape" || m.name == "Creeper Lightning Cosmetic" || m.name == "YT Cape") {
+
+ } else {
+ this.cosButtons.add(new CosmeticButton(this.width/ 2 - 139,this.height / 2 - 145 + countCosmetic, 323, 35, m));
+ countCosmetic = countCosmetic + 40;
+ //System.out.println(countModule);
+ }
+ }
+
+
+ //this.buttonList.add(new LogoButtonWhite(69, this.width / 2 - 186, this.height / 2 - 109, ""));
+ //this.buttonList.add(new HomeCGButton(1, this.width / 2 - 188, this.height / 2 - 70, ""));
+ //this.buttonList.add(new CosmeticsCGButton(3, this.width / 2 - 188, this.height / 2 - 40, ""));
+ //this.buttonList.add(new ToggleableCGButton(2, this.width / 2 - 188, this.height / 2 - 12, ""));
+ //this.buttonList.add(new ServersCGButton(4, this.width / 2 - 188, this.height / 2 + 30, ""));
+ //this.buttonList.add(new SettingsCGButton(5, this.width / 2 - 188, this.height / 2 + 60, ""));
+
+
+}
+
+
+
+ @Override
+ protected void actionPerformed(GuiButton button) throws IOException {
+ if(button.id == 1) {
+ type = GUIType.CLICK;
+ mc.displayGuiScreen(new CosmeticGUI());
+ //mc.displayGuiScreen(new ClickGUI());
+
+ }
+ if(button.id == 5) {
+ mc.displayGuiScreen(new HUDConfigScreen());
+ }
+ if(button.id == 3) {
+ setType(GUIType.COSMETIC);
+ mc.displayGuiScreen(new CosmeticGUI());
+ //type = GUIType.COSMETIC;
+ //mc.displayGuiScreen(new CosmeticGUINew());
+ }
+ if(button.id == 2) {
+ setType(GUIType.PROFILE);
+ mc.displayGuiScreen(new CosmeticGUI());
+ //type = GUIType.PROFILE;
+ //mc.displayGuiScreen(new ClickGUI2());
+ }
+ if(button.id == 4) {
+ setType(GUIType.THEME);
+ mc.displayGuiScreen(new CosmeticGUI());
+ //mc.displayGuiScreen(new GuiMultiplayerIngame());
+ }
+ if(button.id == 6) {
+ try {
+ Desktop desktop = java.awt.Desktop.getDesktop();
+ URI oURL = new URI("http://hynomacka.ddns.net");
+ desktop.browse(oURL);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ if(button.id == 8) {
+ type = GUIType.COSMETIC;
+ mc.displayGuiScreen(new CosmeticGUI());
+ //mc.displayGuiScreen(new CosmeticGUINew());
+ }
+ if(button.id == 9) {
+ mc.displayGuiScreen(new CosmeticGUI());
+ }
+ if(button.id == 0) {
+ type = GUIType.PROFILE;
+ mc.displayGuiScreen(new CosmeticGUI());
+ //mc.displayGuiScreen(new ProfileCGui(null));
+ }
+ }
+
+//}
+ public static void setType(GUIType killme) {
+ if(killme == GUIType.CLICK) {
+ type = GUIType.CLICK;
+ //this.m = null;
+ } else if(killme == GUIType.COSMETIC) {
+ type = GUIType.COSMETIC;
+ //this.m = null;
+ } else if(killme == GUIType.PROFILE) {
+ type = GUIType.PROFILE ;
+ //this.m = null;
+ }else if(killme == GUIType.THEME) {
+ type = GUIType.THEME ;
+ }
+ }
+ public static void setTheme(GUITheme killme) {
+ if(killme == GUITheme.DARK) {
+ theme = GUITheme.DARK;
+ //this.m = null;
+ } else if(killme == GUITheme.LIGHT) {
+ theme = GUITheme.LIGHT;
+ //this.m = null;
+ }
+ }
+
+ //public ParticleEngine engine = new ParticleEngine();
+
+ @Override
+ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
+
+ //FontUtilCedo.normal.drawString("l", 340, 135, new Color(50, 50, 50, 255).getRGB());
+
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+ GlStateManager.enableAlpha();
+ GlStateManager.enableBlend();
+
+ ScaledResolution sr = new ScaledResolution(mc);
+
+ ClickGUIUtil.renderCosmeticMenu();
+
+ /*RoundedUtils.drawSmoothRoundedRect((this.width / 2 - 190), (this.height / 2 - 110), (this.width / 2 + 190), (this.height / 2 + 110), 18.0F, new Color(25, 25, 30, 255).getRGB());
+ RoundedUtils.drawSmoothRoundedRect((this.width / 2 - 190), (this.height / 2 - 110), (this.width / 2 - 150), (this.height / 2 + 110), 18.0F, new Color(50, 50, 55, 155).getRGB());
+ RoundedUtils.drawSmoothRoundedRect((this.width / 2 + 90), (this.height / 2 - 110), (this.width / 2 + 190), (this.height / 2 + 110), 18.0F, new Color(50, 50, 55, 155).getRGB());
+ RoundedUtils.drawSmoothRoundedRect((this.width / 2 - 185), (this.height / 2 - 74), (this.width / 2 - 155), (this.height / 2 - 72), 4.0F, new Color(100, 100, 105, 255).getRGB());
+
+
+ //Gui.drawHorizontalLine(this.width / 2 - 185, this.height / 2 - 63 , this.height / 2 - 77, -1);
+
+
+ /*DrawUtil.draw2DImage(new ResourceLocation("Animeware/nightskywhite.png"), this.width / 2 - 189 + 3, this.height / 2 - 112 + 3, 30, 30, Color.WHITE);
+ if(type == GUIType.CLICK) {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/home.png"), this.width / 2 - 188 + 3, this.height / 2 - 70 + 3, 30, 30, Color.WHITE);
+ } else {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/home.png"), this.width / 2 - 188 + 3, this.height / 2 - 70 + 3, 30, 30, Color.GRAY);
+ }
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/positioning.png"), this.width / 2 - 188 + 3, this.height / 2 + 60 + 3, 30, 30, Color.WHITE);
+ if(type == GUIType.COSMETIC) {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/cosmetics.png"), this.width / 2 - 188 + 3, this.height / 2 - 40 + 3, 30, 30, Color.WHITE);
+ } else {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/cosmetics.png"), this.width / 2 - 188 + 3, this.height / 2 - 40 + 3, 30, 30, Color.GRAY);
+ } if(type == GUIType.PROFILE) {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/togglesprint.png"), this.width / 2 - 188 + 3, this.height / 2 - 5 - 2, 30, 30, Color.WHITE);
+ } else {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/togglesprint.png"), this.width / 2 - 188 + 3, this.height / 2 - 5 - 2, 30, 30, Color.GRAY);
+ } if(type == GUIType.THEME) {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/settings.png"), this.width / 2 - 188 + 3, this.height / 2 + 30 - 2, 30, 30, Color.WHITE);
+ } else {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/settings.png"), this.width / 2 - 188 + 3, this.height / 2 + 30 - 2, 30, 30, Color.GRAY);
+ }*/
+
+ try {
+ if(MinecraftServer.getServer().isSinglePlayer()) {
+
+ NetworkPlayerInfo playerInfo = mc.getNetHandler().getPlayerInfo(mc.thePlayer.getUniqueID());
+ if(playerInfo != null) {
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+ }
+ } else if(Minecraft.getMinecraft().getCurrentServerData() != null) {
+ NetworkPlayerInfo playerInfo = mc.getNetHandler().getPlayerInfo(mc.thePlayer.getUniqueID());
+ if(playerInfo != null) {
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+ }
+
+ } else {
+
+ }
+ } catch(NullPointerException e) {
+ e.printStackTrace();
+ }
+
+ GL11.glDisable(GL11.GL_SCISSOR_TEST);
+ checkMouseWheelCosmetic(mouseX, mouseY);
+ GL11.glPushMatrix();
+ GL11.glPushAttrib(GL11.GL_SCISSOR_BIT);
+ {
+ RenderUtil.scissor(this.width / 2 - 190, this.height / 2 - 110, this.width / 2 + 190, this.height / 2 + 110);
+ //RenderUtil.scissor2(this.width / 2 - 190, this.height / 2 - 110, 1920, 1080);
+ //RenderUtil.scissor(this.width / 2 - 100, -300, 1920, 1080);
+ GL11.glEnable(GL11.GL_SCISSOR_TEST);
+ }
+
+ super.drawScreen(mouseX, mouseY, partialTicks);
+ for(CosmeticButton cos : cosButtons) {
+ cos.draw();
+ }
+ GL11.glDisable(GL11.GL_SCISSOR_TEST);
+ GL11.glPopAttrib();
+ GL11.glPopMatrix();
+ /*else if(type == GUIType.PROFILE) {
+ GL11.glDisable(GL11.GL_SCISSOR_TEST);
+ checkMouseWheelCosmetic(mouseX, mouseY);
+ GL11.glPushMatrix();
+ GL11.glPushAttrib(GL11.GL_SCISSOR_BIT);
+ {
+ RenderUtil.scissor(this.width / 2 - 190, this.height / 2 - 110, this.width / 2 + 190, this.height / 2 + 110);
+ //RenderUtil.scissor2(this.width / 2 - 190, this.height / 2 - 110, 1920, 1080);
+ //RenderUtil.scissor(this.width / 2 - 100, -300, 1920, 1080);
+ GL11.glEnable(GL11.GL_SCISSOR_TEST);
+ }
+
+ super.drawScreen(mouseX, mouseY, partialTicks);
+ for(CosmeticButton cos : cosButtons) {
+ cos.draw();
+ }
+ GL11.glDisable(GL11.GL_SCISSOR_TEST);
+ GL11.glPopAttrib();
+ GL11.glPopMatrix();
+ }*/
+
+
+
+}
+
+
+
+
+
+ //@Override
+ public int dname(DiscordUser user) {
+ return fontRendererObj.drawString(user.username + "#" + user.discriminator, 352, 373, ColorMode.getWhiteColor());
+ }
+
+ @Override
+ public void draw() {
+
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+
+ Playerdraw(15 + 15, 15 + 50, 25, 50, 0, null);
+
+ super.draw();
+ }
+ public static void Playerdraw(int posX, int posY, int scale, float mouseX, float mouseY, EntityLivingBase ent)
+ {
+ if(MinecraftServer.getServer().isSinglePlayer()) {
+ GlStateManager.enableColorMaterial();
+ GlStateManager.pushMatrix();
+ GlStateManager.translate((float)posX, (float)posY, 50.0F);
+ GlStateManager.scale((float)(-65), (float)65, (float)65);
+ GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F);
+ float f = ent.renderYawOffset;
+ float f1 = ent.rotationYaw;
+ float f2 = ent.rotationPitch;
+ float f3 = ent.prevRotationYawHead;
+ float f4 = ent.rotationYawHead;
+ GlStateManager.rotate(155.0F, 0.0F, 1.0F, 0.0F);
+ RenderHelper.enableStandardItemLighting();
+ GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(-((float)Math.atan((double)(mouseY / 40.0F))) * 20.0F, 1.0F, 0.0F, 0.0F);
+ ent.renderYawOffset = (float)Math.atan((double)(mouseX / 40.0F)) * 20.0F;
+ ent.rotationYaw = (float)Math.atan((double)(mouseX / 40.0F)) * 40.0F;
+ ent.rotationPitch = -((float)Math.atan((double)(mouseY / 40.0F))) * 20.0F;
+ ent.rotationYawHead = ent.rotationYaw;
+ ent.prevRotationYawHead = ent.rotationYaw;
+ GlStateManager.translate(0.0F, 0.0F, 0.0F);
+ RenderManager rendermanager = Minecraft.getMinecraft().getRenderManager();
+ rendermanager.setPlayerViewY(180.0F);
+ rendermanager.setRenderShadow(false);
+ rendermanager.renderEntityWithPosYaw(ent, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F);
+ rendermanager.setRenderShadow(true);
+ ent.renderYawOffset = f;
+ ent.rotationYaw = f1;
+ ent.rotationPitch = f2;
+ ent.prevRotationYawHead = f3;
+ ent.rotationYawHead = f4;
+ GlStateManager.popMatrix();
+ RenderHelper.disableStandardItemLighting();
+ GlStateManager.disableRescaleNormal();
+ GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit);
+ GlStateManager.disableTexture2D();
+ GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
+ } else if(Minecraft.getMinecraft().getCurrentServerData() != null) {
+ GlStateManager.enableColorMaterial();
+ GlStateManager.pushMatrix();
+ GlStateManager.translate((float)posX, (float)posY, 50.0F);
+ GlStateManager.scale((float)(-65), (float)65, (float)65);
+ GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F);
+ float f = ent.renderYawOffset;
+ float f1 = ent.rotationYaw;
+ float f2 = ent.rotationPitch;
+ float f3 = ent.prevRotationYawHead;
+ float f4 = ent.rotationYawHead;
+ GlStateManager.rotate(155.0F, 0.0F, 1.0F, 0.0F);
+ RenderHelper.enableStandardItemLighting();
+ GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(-((float)Math.atan((double)(mouseY / 40.0F))) * 20.0F, 1.0F, 0.0F, 0.0F);
+ ent.renderYawOffset = (float)Math.atan((double)(mouseX / 40.0F)) * 20.0F;
+ ent.rotationYaw = (float)Math.atan((double)(mouseX / 40.0F)) * 40.0F;
+ ent.rotationPitch = -((float)Math.atan((double)(mouseY / 40.0F))) * 20.0F;
+ ent.rotationYawHead = ent.rotationYaw;
+ ent.prevRotationYawHead = ent.rotationYaw;
+ GlStateManager.translate(0.0F, 0.0F, 0.0F);
+ RenderManager rendermanager = Minecraft.getMinecraft().getRenderManager();
+ rendermanager.setPlayerViewY(180.0F);
+ rendermanager.setRenderShadow(false);
+ rendermanager.renderEntityWithPosYaw(ent, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F);
+ rendermanager.setRenderShadow(true);
+ ent.renderYawOffset = f;
+ ent.rotationYaw = f1;
+ ent.rotationPitch = f2;
+ ent.prevRotationYawHead = f3;
+ ent.rotationYawHead = f4;
+ GlStateManager.popMatrix();
+ RenderHelper.disableStandardItemLighting();
+ GlStateManager.disableRescaleNormal();
+ GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit);
+ GlStateManager.disableTexture2D();
+ GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
+ } else {
+
+ }
+ }
+
+
+
+ @Override
+ protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException {
+ super.mouseClicked(mouseX, mouseY, mouseButton);
+ for(ModButton m : modButtons) {
+ m.onClick(mouseX, mouseY, mouseButton);
+ }
+ for(CosmeticButton cos : cosButtons) {
+ cos.onClick(mouseX, mouseY, mouseButton);
+ }
+ super.mouseClicked(mouseX, mouseY, mouseButton);
+ }
+ private void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 270, 360, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 180, 270, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 180, color);
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+
+ @Override
+ public void onGuiClosed() {
+ super.onGuiClosed();
+ mc.entityRenderer.stopUseShader();
+ }
+
+
+}
diff --git a/src/minecraft/animeware/ui/DragGUI.java b/src/minecraft/animeware/ui/DragGUI.java
new file mode 100644
index 0000000..663f8d5
--- /dev/null
+++ b/src/minecraft/animeware/ui/DragGUI.java
@@ -0,0 +1,173 @@
+package animeware.ui;
+
+import java.awt.Color;
+import java.awt.Desktop;
+import java.io.IOException;
+import java.net.URI;
+import java.util.ArrayList;
+
+import animeware.NightSky;
+import animeware.gui.clickgui.ClickGUI;
+import animeware.gui.mainmenu.QuitButton;
+import animeware.hud.Category;
+import animeware.hud.DraggableComponent;
+import animeware.hud.mod.HudMod;
+import animeware.hud.mod.Module;
+import animeware.ui.comp.CosmeticButton;
+import animeware.ui.comp.clickgui.ModButton;
+import animeware.ui.comp.clickgui.SettingButton;
+import animeware.ui.login.LoginScreen;
+import animeware.util.notification.Notification;
+import animeware.util.notification.NotificationManager;
+import animeware.util.notification.NotificationType;
+import animeware.util.render.ColorUtil;
+import animeware.util.render.DrawUtil;
+import animeware.util.render.RenderUtil;
+import animeware.util.render.RoundedUtils;
+import animeware.util.settings.Setting;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiMultiplayer;
+import net.minecraft.client.gui.GuiOptions;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.GuiSelectWorld;
+import net.minecraft.client.gui.GuiTextField;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.OpenGlHelper;
+import net.minecraft.client.renderer.RenderHelper;
+import net.minecraft.client.renderer.entity.RenderManager;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.util.ResourceLocation;
+
+public class DragGUI extends GuiScreen {
+
+ boolean hovered;
+ public DraggableComponent top;
+ public int x, y;
+ public Category viewing;
+ public HudMod configuring;
+ public static GuiTextField username;
+ ArrayList textFields = new ArrayList<>();
+ EntityLivingBase entity;
+ static float rotate;
+ GuiScreen guiScreen;
+ //int Button;
+
+ public DragGUI() {
+ //this.x = x;
+ //this.y = y;
+
+ this.top = new DraggableComponent(100, 100, 177, 20, new Color(0,140,255, 0).getRGB());
+ }
+
+ @Override
+ public void initGui() {
+ //this.buttonList.add(new QuitButton(1, top.getxPosition() - 27, top.getyPosition(), ""));
+ }
+
+ @Override
+ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
+ try {
+ this.hovered = (mouseX >= top.getxPosition() + 180 && mouseY >= top.getyPosition() + 2 && mouseX < top.getxPosition() + 180 + 17 && mouseY < top.getyPosition() + 2 + 15);
+
+ //Playerdraw(top.getxPosition(), top.getyPosition() + 100, 10000, 50.0F, 0.0F, (EntityLivingBase)Minecraft.thePlayer);
+ Playerdraw(top.getxPosition() + 42, top.getyPosition() + 100, 25, 0, 0, mc.thePlayer);
+ RoundedUtils.drawSmoothRoundedRect(top.getxPosition(), top.getyPosition(), top.getxPosition() + 200, top.getyPosition() + 110, 18.0f, new Color(25, 25, 30, 255).getRGB());
+ mc.fontRendererObj.drawString(NightSky.mcname, top.getxPosition() + 70, top.getyPosition() + 82, new Color(255, 255, 254, 255).getRGB());
+ mc.fontRendererObj.drawString(NightSky.rank(), top.getxPosition() + 70, top.getyPosition() + 92, new Color(255, 255, 254, 255).getRGB());
+ //mc.fontRendererObj.drawString(NightSky.DisName, top.getxPosition() + 70, top.getyPosition() + 45, new Color(255, 255, 254, 255).getRGB());
+ //mc.fontRendererObj.drawString(NightSky.DisTag, top.getxPosition() + 70, top.getyPosition() + 55, new Color(255, 255, 254, 255).getRGB());
+ if(hovered) {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/quit.png"), top.getxPosition() + 180, top.getyPosition() + 2, 15, 15, new Color(255, 0, 0));
+ //if(Button == 1) {
+
+ //}
+ //mc.displayGuiScreen(new ClickGUI());
+ } else {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/quit.png"), top.getxPosition() + 180, top.getyPosition() + 2, 15, 15, Color.white);
+ }
+
+ //Gui.drawRect(top.getxPosition() - 3, top.getyPosition() - 3, top.getxPosition() + 423, top.getyPosition() + 328, -1);
+ //Gui.drawRect(top.getxPosition(), top.getyPosition() + 5, top.getxPosition() + 420, top.getyPosition() + 325, new Color(33,33,33).getRGB());
+ top.draw(mouseX, mouseY);
+ } catch (NullPointerException e) {
+ System.out.println("GUI ERROR");
+ }
+ super.drawScreen(mouseX, mouseY, partialTicks);
+ }
+ @Override
+ protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException {
+ if(hovered) {
+ if(mouseButton == 0) {
+ mc.displayGuiScreen(new ClickGUI());
+ }
+ }
+ super.mouseClicked(mouseX, mouseY, mouseButton);
+
+ }
+ @Override
+ protected void actionPerformed(GuiButton button) throws IOException {
+ if(button.id == 1) {
+ //mc.displayGuiScreen(new GuiSelectWorld(this));
+ }
+ super.actionPerformed(button);
+ }
+
+
+
+
+
+ public static void Playerdraw(int posX, int posY, int scale, float mouseX, float mouseY, EntityLivingBase ent)
+ {
+ try {
+ GlStateManager.enableColorMaterial();
+ GlStateManager.pushMatrix();
+ GlStateManager.translate((float)posX, (float)posY, 50.0F);
+ GlStateManager.scale((float)(-40), (float)42, (float)42);
+ GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F);
+ float f = ent.renderYawOffset;
+ float f1 = ent.rotationYaw;
+ float f2 = ent.rotationPitch;
+ float f3 = ent.prevRotationYawHead;
+ float f4 = ent.rotationYawHead;
+ GlStateManager.rotate(180f, 0.0F, 1.0F, 0.0F);
+ RenderHelper.enableStandardItemLighting();
+ GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(-((float)Math.atan((double)(mouseY / 40.0F))) * 20.0F, 1.0F, 0.0F, 0.0F);
+ ent.renderYawOffset = (float)Math.atan((double)(mouseX / 40.0F)) * 20.0F;
+ ent.rotationYaw = (float)Math.atan((double)(mouseX / 40.0F)) * 40.0F;
+ ent.rotationPitch = -((float)Math.atan((double)(mouseY / 40.0F))) * 20.0F;
+ ent.rotationYawHead = ent.rotationYaw;
+ ent.prevRotationYawHead = ent.rotationYaw;
+ GlStateManager.translate(0.0F, 0.0F, 0.0F);
+ RenderManager rendermanager = Minecraft.getMinecraft().getRenderManager();
+ rendermanager.setPlayerViewY(180.0F);
+ rendermanager.setRenderShadow(false);
+ rendermanager.renderEntityWithPosYaw(ent, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F);
+ rendermanager.setRenderShadow(true);
+ ent.renderYawOffset = f;
+ ent.rotationYaw = f1;
+ ent.rotationPitch = f2;
+ ent.prevRotationYawHead = f3;
+ ent.rotationYawHead = f4;
+ GlStateManager.popMatrix();
+ RenderHelper.disableStandardItemLighting();
+ GlStateManager.disableRescaleNormal();
+ GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit);
+ GlStateManager.disableTexture2D();
+ GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
+ } catch (NullPointerException e) {
+ System.out.println("Playerdraw ERROR");
+ }
+
+ }
+
+ @Override
+ public boolean doesGuiPauseGame() {
+ return false;
+ }
+
+
+}
diff --git a/src/minecraft/animeware/ui/GuiLoginMicrosoft.java b/src/minecraft/animeware/ui/GuiLoginMicrosoft.java
new file mode 100644
index 0000000..eda006f
--- /dev/null
+++ b/src/minecraft/animeware/ui/GuiLoginMicrosoft.java
@@ -0,0 +1,95 @@
+package animeware.ui;
+
+import java.io.IOException;
+
+import org.lwjgl.input.Keyboard;
+
+import animeware.util.account.SessionChanger;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.GuiTextField;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.resources.I18n;
+
+public class GuiLoginMicrosoft extends GuiScreen {
+ private GuiTextField username, password;
+
+ @Override
+ protected void actionPerformed(final GuiButton button) {
+ if (button.id == 0) {
+ if(this.username.getText().equals("")) {
+ this.mc.displayGuiScreen(new GuiLoginMicrosoft());
+ } else {
+ SessionChanger.getInstance().setUserMicrosoft(this.username.getText(), this.password.getText());
+ }
+
+ }
+ }
+
+ @Override
+ public void drawScreen(final int x2, final int y2, final float z2) {
+ final ScaledResolution sr = new ScaledResolution(this.mc);
+ this.username.drawTextBox();
+ this.password.drawTextBox();
+ GuiLoginMicrosoft.drawCenteredString(this.mc.fontRendererObj, "Email & Password", (int)(this.width / 2), (int)(sr.getScaledHeight() / 2 - 65), -1);
+ super.drawScreen(x2, y2, z2);
+ }
+
+ @Override
+ public void initGui() {
+ final ScaledResolution sr = new ScaledResolution(this.mc);
+ this.buttonList.clear();
+ this.buttonList.add(new GuiButton(0, this.width / 2 - 50 - 10, this.height / 2, 120, 20, I18n.format("Login Microsoft", new Object[0])));
+ (this.username = new GuiTextField(100, this.fontRendererObj, this.width / 2 - 50 - 10, sr.getScaledHeight() / 2 - 50, 120, 20)).setFocused(true);
+ (this.password = new GuiTextField(100, this.fontRendererObj, this.width / 2 - 50 - 10, sr.getScaledHeight() / 2 - 25, 120, 20)).setFocused(false);
+ Keyboard.enableRepeatEvents(true);
+ }
+
+
+ @Override
+ protected void keyTyped(final char character, final int key) {
+ try {
+ super.keyTyped(character, key);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ if (character == '\t' && !this.username.isFocused()) {
+ this.username.setFocused(true);
+ this.password.setFocused(false);
+ }
+ if (character == '\t' && !this.password.isFocused()) {
+ this.password.setFocused(true);
+ this.username.setFocused(false);
+ }
+ if (character == '\r') {
+ this.actionPerformed(this.buttonList.get(0));
+ }
+ this.username.textboxKeyTyped(character, key);
+ this.password.textboxKeyTyped(character, key);
+ }
+
+ @Override
+ protected void mouseClicked(final int x2, final int y2, final int button) {
+ try {
+ super.mouseClicked(x2, y2, button);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ this.username.mouseClicked(x2, y2, button);
+ this.password.mouseClicked(x2, y2, button);
+ }
+
+ @Override
+ public void onGuiClosed() {
+ mc.entityRenderer.loadEntityShader(null);
+ Keyboard.enableRepeatEvents(false);
+ }
+
+ @Override
+ public void updateScreen() {
+ this.username.updateCursorCounter();
+ this.password.updateCursorCounter();
+ }
+}
diff --git a/src/minecraft/animeware/ui/GuiMultiplayerIngame.java b/src/minecraft/animeware/ui/GuiMultiplayerIngame.java
new file mode 100644
index 0000000..6121e85
--- /dev/null
+++ b/src/minecraft/animeware/ui/GuiMultiplayerIngame.java
@@ -0,0 +1,42 @@
+package animeware.ui;
+
+import java.io.IOException;
+
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiMultiplayer;
+
+public class GuiMultiplayerIngame extends GuiMultiplayer{
+
+ public GuiMultiplayerIngame() {
+ super(null);
+ }
+
+ @Override
+ protected void actionPerformed(GuiButton button) throws IOException {
+
+ if(button.id == 1 || button.id == 4) {
+ disconnect();
+ }
+
+ super.actionPerformed(button);
+ }
+
+ @Override
+ public void connectToSelected() {
+ disconnect();
+ super.connectToSelected();
+ }
+
+ private void disconnect() {
+ if(this.mc.theWorld != null) {
+
+ this.mc.theWorld.sendQuittingDisconnectingPacket();
+ this.mc.loadWorld(null);
+ this.mc.displayGuiScreen(null);
+ this.parentScreen = null;
+
+ }
+
+ }
+
+}
diff --git a/src/minecraft/animeware/ui/comp/ClickGUIButtonLightShort.java b/src/minecraft/animeware/ui/comp/ClickGUIButtonLightShort.java
new file mode 100644
index 0000000..9d43517
--- /dev/null
+++ b/src/minecraft/animeware/ui/comp/ClickGUIButtonLightShort.java
@@ -0,0 +1,133 @@
+//
+// Decompiled by Procyon v0.5.36
+//
+
+package animeware.ui.comp;
+
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.client.renderer.Tessellator;
+import org.lwjgl.opengl.GL11;
+
+import animeware.util.font.FontUtil;
+
+import java.io.File;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.client.renderer.GlStateManager;
+import java.awt.Color;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiButton;
+
+public class ClickGUIButtonLightShort extends GuiButton
+{
+ private int j6;
+ private int j10;
+ int fade;
+ int fade2;
+
+
+ public ClickGUIButtonLightShort(final int i, final int j, final int k, final String s) {
+ this(i, j, k, 21, 21, s);
+
+ }
+
+ public ClickGUIButtonLightShort(final int i, final int j, final int k, final int l, final int i1, final String s) {
+ super(i, j, k, l, i1, s);
+ this.enabled = true;
+ this.visible = true;
+ }
+
+ @Override
+ protected int getHoverState(final boolean flag) {
+ byte byte0 = 1;
+ if (!this.enabled) {
+ byte0 = 0;
+ }
+ else if (flag) {
+ byte0 = 2;
+ }
+ return byte0;
+ }
+
+ @Override
+ public void drawButton(final Minecraft mc, final int mouseX, final int mouseY) {
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ int j = -1;
+ if (this.hovered) {
+ j = new Color(0,0,0,0).getRGB();
+ }
+ if (!this.hovered) {
+ this.fade = 230;
+ }
+ else {
+ if (this.fade <= 50) {
+ return;
+ }
+ if (this.fade != 160) {
+ this.fade -= 10;
+ }
+ }
+ if (!this.hovered) {
+ this.fade2 = 200;
+ }
+ else {
+ if (this.fade2 <= 30) {
+ return;
+ }
+ if (this.fade2 != 200) {
+ this.fade2 += 10;
+ }
+ }
+ final float b = (float)(this.hovered ? new Color(100, 100, 100, 100).getRGB() : new Color(100, 100, 100, 100).getRGB());
+ final Color a = new Color(100, 100, 100, this.fade);
+ final Color a2 = new Color(100, 100, 100, this.fade2);
+ final Color a3 = new Color(100, 100, 100, this.fade);
+ if (this.xPosition >= this.xPosition && this.yPosition >= this.yPosition && this.xPosition < this.xPosition + this.width && this.yPosition < this.yPosition + this.height) {
+ final int n = 5;
+ final FontRenderer fr = mc.fontRendererObj;
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ this.drawRoundedRect(this.xPosition - 1, this.yPosition - 1, this.width + 2, this.height + 2, 3, a2);
+ this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a3);
+ this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a);
+ GlStateManager.color(1.0f, 1.0f, 1.0f);
+ //Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/icons/logo.png"));
+ //Gui.drawModalRectWithCustomSizedTexture(this.xPosition + 3, this.yPosition + 3, 0.0f, 0.0f, 15, 15, 15.0f, 15.0f);
+ FontUtil.normal.drawCenteredString(this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 5) / 2, j);
+ }
+ }
+
+ private void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 270, 360, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 180, 270, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 180, color);
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+}
diff --git a/src/minecraft/animeware/ui/comp/CosmeticButton.java b/src/minecraft/animeware/ui/comp/CosmeticButton.java
new file mode 100644
index 0000000..177ba97
--- /dev/null
+++ b/src/minecraft/animeware/ui/comp/CosmeticButton.java
@@ -0,0 +1,105 @@
+package animeware.ui.comp;
+
+import java.awt.Color;
+
+import animeware.cosmetic.CosmeticModule;
+import animeware.hud.mod.HudMod;
+import animeware.ui.themes.impl.ThemeManager;
+import animeware.util.font.FontUtil;
+import animeware.util.render.ColorUtils;
+import animeware.util.render.DrawUtil;
+import animeware.util.render.RoundedUtils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiScreen;
+
+public class CosmeticButton {
+
+ public int x, y, w, h;
+ public CosmeticModule m;
+ private boolean enabled;
+ boolean allowClick;
+ boolean allowDraw;
+
+ int width = GuiScreen.width;
+ int height = GuiScreen.height;
+
+ Minecraft mc = Minecraft.getMinecraft();
+
+ public CosmeticButton(int x, int y, int w, int h, CosmeticModule m) {
+ this.x = x;
+ this.y = y;
+ this.w = w;
+ this.h = h;
+ this.m = m;
+ this.enabled = false;
+
+ }
+
+ public void draw() {
+ Gui.drawRect(x, y, x + w, y + h, new Color(0, 0, 0, 0).getRGB());
+ //RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 90, y + h, 18.0F, new Color(40, 40, 45, 255).getRGB());
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w, y + h, 18.0F, new Color(50, 50, 55, 155).getRGB()); //70, 70, 75, 155
+ if(m.isEnabled()) {
+ if(ThemeManager.astolfoBtn == true) {
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 210, y + h, 18.0F, ColorUtils.astolfoColors(10, 100, 100L));
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 190, y + h, 18.0F, ColorUtils.astolfoColors(10, 100, 900L));
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 192, y + h, 18.0F, ColorUtils.astolfoColors(10, 100, 800L));
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 196, y + h, 18.0F, ColorUtils.astolfoColors(10, 100, 700L));
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 200, y + h, 18.0F, ColorUtils.astolfoColors(10, 100, 600L));
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 202, y + h, 18.0F, ColorUtils.astolfoColors(10, 100, 500L));
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 204, y + h, 18.0F, ColorUtils.astolfoColors(10, 100, 400L));
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 206, y + h, 18.0F, ColorUtils.astolfoColors(10, 100, 300L));
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 208, y + h, 18.0F, ColorUtils.astolfoColors(10, 100, 200L));
+
+ } else {
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 288, y + h, 18.0F, new Color(0, 150, 200, 255).getRGB());
+ }//RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 190, y + h, 18.0F, new Color(0, 150, 200, 255).getRGB());
+ //DrawUtil.drawRoundedRect(x - 1, y - 5, x + w + 1, y + h + 1, 7 , new Color(200, 0, 0, 100).getRGB());
+ }else {
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 288, y + h, 18.0F, new Color(50, 50, 55, 255).getRGB());
+ //DrawUtil.drawRoundedRect(x - 1, y - 5, x + w + 1, y + h + 1, 7 , new Color(105, 105, 105, 100).getRGB());
+ }
+ //DrawUtil.drawRoundedRect(x, y - 4, x + w, y + h, 7 , new Color(205, 205, 205, 0).getRGB());
+ //DrawUtil.drawRoundedRect(x, y - 4, x + w, y + h, 7 , new Color(15, 15, 15, 255).getRGB());
+ FontUtil.normal.drawString(m.name, x + 45, y + 16, getColor());
+ //FontUtil.normal.drawString(m.description, x + 45, y + 25, new Color(70, 70, 75, 255).getRGB());
+ if(!m.getIcon().getResourcePath().equals("")) {
+ DrawUtil.draw2DImage(m.getIcon(), x + 5, y + 5, 25, 25, Color.WHITE);
+ }
+ //GuiScreen.buttonList.add(new SettingsCGButton(2, 262, height / 3 - 10, ""));
+ //Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation ("Animeware/background/logo.png"));
+ }
+
+
+ private int getColor() {
+ if(m.isEnabled()) {
+ return new Color(155, 155, 155, 250).getRGB();
+ }else {
+ return new Color(155, 155, 155, 250).getRGB();
+ }
+
+ }
+
+ public void onClick(int mouseX, int mouseY, int Button) {
+ if(mouseX >= x && mouseX <= x + w && mouseY >= y && mouseY <= y +h) {
+ m.toggle();
+ System.out.println(this.getModNameToggle());
+ }
+
+ }
+ private String getModNameToggle() {
+ if(m.enabled) {
+ return m.name + ": enabled";
+ } else if(!m.enabled) {
+ return m.name + ": disabled";
+ }else {
+ return m.name;
+ }
+ }
+ private String getModName() {
+ return m.name;
+ }
+
+
+}
diff --git a/src/minecraft/animeware/ui/comp/CosmeticsCGButton.java b/src/minecraft/animeware/ui/comp/CosmeticsCGButton.java
new file mode 100644
index 0000000..e8d8ae0
--- /dev/null
+++ b/src/minecraft/animeware/ui/comp/CosmeticsCGButton.java
@@ -0,0 +1,124 @@
+//
+// Decompiled by Procyon v0.5.36
+//
+
+package animeware.ui.comp;
+
+import java.awt.Color;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.gui.clickgui.ClickGUI;
+import animeware.gui.clickgui.GUIType;
+import animeware.util.font.ucfont.UCFontRenderer;
+import animeware.util.render.ColorMode;
+import animeware.util.render.DrawUtil;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.util.ResourceLocation;
+
+public class CosmeticsCGButton extends GuiButton
+{
+ private int j6;
+ private int j10;
+ int fade;
+ int fade2;
+ private final UCFontRenderer fr;
+
+ public CosmeticsCGButton(final int i, final int j, final int k, final String s) {
+ this(i, j, k, 95, 27, s);
+
+ }
+
+ public CosmeticsCGButton(final int i, final int j, final int k, final int l, final int i1, final String s) {
+ super(i, j, k, l, i1, s);
+ this.fr = new UCFontRenderer(new ResourceLocation("Animeware/font/font.ttf"), 19);
+ this.enabled = true;
+ this.visible = true;
+ }
+
+ @Override
+ protected int getHoverState(final boolean flag) {
+ byte byte0 = 1;
+ if (!this.enabled) {
+ byte0 = 0;
+ }
+ else if (flag) {
+ byte0 = 2;
+ }
+ return byte0;
+ }
+
+ @Override
+ public void drawButton(final Minecraft mc, final int mouseX, final int mouseY) {
+ final float b = (float)(this.hovered ? new Color(30, 0, 0, 100).getRGB() : new Color(30, 0, 0, 30).getRGB());
+ final Color a = new Color(15, 0, 0, this.fade);
+ final Color a2 = new Color(100, 0, 0, this.fade2);
+ final Color a3 = new Color(80, 0, 0, this.fade);
+ if (this.xPosition >= this.xPosition && this.yPosition >= this.yPosition && this.xPosition < this.xPosition + this.width && this.yPosition < this.yPosition + this.height) {
+ final int n = 10;
+ final FontRenderer fr = mc.fontRendererObj;
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ if(!hovered) {
+ this.fade = 128;
+ }
+ else {
+ if(this.fade <= 30) {
+ return;
+ }
+ if(this.fade <= 250) {
+ this.fade += 5;
+ }
+ }
+ int f = 160;
+ if(ClickGUI.type == GUIType.CLICK || this.hovered) {
+ this.fr.drawCenteredString(this.displayString, this.xPosition + this.width / 3 + 19, this.yPosition + (this.height - 8) / 2, new Color(this.fade, this.fade, this.fade, 255).getRGB());
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/cosmetics.png"), this.xPosition, this.yPosition, 25, 25, new Color( this.fade, this.fade, this.fade, 255));
+ } else {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/cosmetics.png"), this.xPosition, this.yPosition, 25, 25, Color.gray);
+ this.fr.drawCenteredString(this.displayString, this.xPosition + this.width / 3 + 19, this.yPosition + (this.height - 8) / 2, new Color(128, 128, 128).getRGB());
+ }
+ }
+ }
+
+
+ private void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 370, 560, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 280, 370, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 880, color);
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+
+}
diff --git a/src/minecraft/animeware/ui/comp/HomeCGButton.java b/src/minecraft/animeware/ui/comp/HomeCGButton.java
new file mode 100644
index 0000000..a8772f0
--- /dev/null
+++ b/src/minecraft/animeware/ui/comp/HomeCGButton.java
@@ -0,0 +1,124 @@
+//
+// Decompiled by Procyon v0.5.36
+//
+
+package animeware.ui.comp;
+
+import java.awt.Color;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.gui.clickgui.ClickGUI;
+import animeware.gui.clickgui.GUIType;
+import animeware.util.font.FontUtil;
+import animeware.util.font.ucfont.UCFontRenderer;
+import animeware.util.render.DrawUtil;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.util.ResourceLocation;
+
+public class HomeCGButton extends GuiButton
+{
+ float anim = 0.0F;
+ private int j6;
+ private int j10;
+ int fade;
+ int fade2;
+ private final UCFontRenderer fr;
+
+ public HomeCGButton(final int i, final int j, final int k, final String s) {
+ this(i, j, k, 95, 27, s);
+
+ }
+
+ public HomeCGButton(final int i, final int j, final int k, final int l, final int i1, final String s) {
+ super(i, j, k, l, i1, s);
+ this.fr = new UCFontRenderer(new ResourceLocation("Animeware/font/font.ttf"), 19);
+ this.enabled = true;
+ this.visible = true;
+ }
+
+ @Override
+ protected int getHoverState(final boolean flag) {
+ byte byte0 = 1;
+ if (!this.enabled) {
+ byte0 = 0;
+ }
+ else if (flag) {
+ byte0 = 2;
+ }
+ return byte0;
+ }
+
+ @Override
+ public void drawButton(final Minecraft mc, final int mouseX, final int mouseY) {
+ final float b = (float)(this.hovered ? new Color(30, 0, 0, 100).getRGB() : new Color(30, 0, 0, 30).getRGB());
+ final Color a = new Color(15, 0, 0, this.fade);
+ final Color a2 = new Color(100, 0, 0, this.fade2);
+ final Color a3 = new Color(80, 0, 0, this.fade);
+ if (this.xPosition >= this.xPosition && this.yPosition >= this.yPosition && this.xPosition < this.xPosition + this.width && this.yPosition < this.yPosition + this.height) {
+ final int n = 10;
+ final FontRenderer fr = mc.fontRendererObj;
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ if(!hovered) {
+ this.fade = 128;
+ }
+ else {
+ if(this.fade <= 30) {
+ return;
+ }
+ if(this.fade <= 250) {
+ this.fade += 5;
+ }
+ }
+ int f = 160;
+ if(ClickGUI.type == GUIType.CLICK || this.hovered) {
+ this.fr.drawCenteredString(this.displayString, this.xPosition + this.width / 3 + 15, this.yPosition + (this.height - 8) / 2, new Color(this.fade, this.fade, this.fade, 255).getRGB());
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/home.png"), this.xPosition, this.yPosition, 25, 25, new Color( this.fade, this.fade, this.fade, 255));
+ } else {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/home.png"), this.xPosition, this.yPosition, 25, 25, Color.gray);
+ this.fr.drawCenteredString(this.displayString, this.xPosition + this.width / 3 + 15, this.yPosition + (this.height - 8) / 2, new Color(128, 128, 128).getRGB());
+ }
+ }
+ }
+
+ private void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 370, 560, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 280, 370, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 880, color);
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+
+}
diff --git a/src/minecraft/animeware/ui/comp/LArrowBtn.java b/src/minecraft/animeware/ui/comp/LArrowBtn.java
new file mode 100644
index 0000000..957b8d2
--- /dev/null
+++ b/src/minecraft/animeware/ui/comp/LArrowBtn.java
@@ -0,0 +1,119 @@
+//
+// Decompiled by Procyon v0.5.36
+//
+
+package animeware.ui.comp;
+
+import java.awt.Color;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.gui.clickgui.ClickGUI;
+import animeware.gui.clickgui.GUIType;
+import animeware.util.render.DrawUtil;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.util.ResourceLocation;
+
+public class LArrowBtn extends GuiButton
+{
+ float anim = 0.0F;
+ private int j6;
+ private int j10;
+ int fade;
+ int fade2;
+
+
+ public LArrowBtn(final int i, final int j, final int k, final String s) {
+ this(i, j, k, 35, 35, s);
+
+ }
+
+ public LArrowBtn(final int i, final int j, final int k, final int l, final int i1, final String s) {
+ super(i, j, k, l, i1, s);
+ this.enabled = true;
+ this.visible = true;
+ }
+
+ @Override
+ protected int getHoverState(final boolean flag) {
+ byte byte0 = 1;
+ if (!this.enabled) {
+ byte0 = 0;
+ }
+ else if (flag) {
+ byte0 = 2;
+ }
+ return byte0;
+ }
+
+ @Override
+ public void drawButton(final Minecraft mc, final int mouseX, final int mouseY) {
+ final float b = (float)(this.hovered ? new Color(30, 0, 0, 100).getRGB() : new Color(30, 0, 0, 30).getRGB());
+ final Color a = new Color(15, 0, 0, this.fade);
+ final Color a2 = new Color(100, 0, 0, this.fade2);
+ final Color a3 = new Color(80, 0, 0, this.fade);
+ if (this.xPosition >= this.xPosition && this.yPosition >= this.yPosition && this.xPosition < this.xPosition + this.width && this.yPosition < this.yPosition + this.height) {
+ final int n = 10;
+ final FontRenderer fr = mc.fontRendererObj;
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ if(!hovered) {
+ this.fade = 128;
+ }
+ else {
+ if(this.fade <= 30) {
+ return;
+ }
+ if(this.fade <= 250) {
+ this.fade += 5;
+ }
+ }
+ int f = 160;
+ if(ClickGUI.type == GUIType.CLICK || this.hovered) {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/zonix/left.png"), this.xPosition + 3, this.yPosition + 3, 30, 30, new Color( this.fade, this.fade, this.fade, 255));
+ } else {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/zonix/left.png"), this.xPosition + 3, this.yPosition + 3, 30, 30, Color.gray);
+ }
+ }
+ }
+
+ private void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 370, 560, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 280, 370, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 880, color);
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+
+}
diff --git a/src/minecraft/animeware/ui/comp/LogoButtonWhite.java b/src/minecraft/animeware/ui/comp/LogoButtonWhite.java
new file mode 100644
index 0000000..d75cdde
--- /dev/null
+++ b/src/minecraft/animeware/ui/comp/LogoButtonWhite.java
@@ -0,0 +1,149 @@
+//
+// Decompiled by Procyon v0.5.36
+//
+
+package animeware.ui.comp;
+
+import java.awt.Color;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.NightSky;
+import animeware.util.font.FontUtil;
+import animeware.util.font.ucfont.UCFontRenderer;
+import animeware.util.render.ColorMode;
+import animeware.util.render.DrawUtil;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.util.ResourceLocation;
+
+public class LogoButtonWhite extends GuiButton
+{
+ private int j6;
+ private int j10;
+ int fade;
+ int fade2;
+ private final UCFontRenderer fr;
+
+ public LogoButtonWhite(final int i, final int j, final int k, final String s) {
+ this(i, j, k, 35, 35, s);
+
+ }
+
+ public LogoButtonWhite(final int i, final int j, final int k, final int l, final int i1, final String s) {
+ super(i, j, k, l, i1, s);
+ this.fr = new UCFontRenderer(new ResourceLocation("Animeware/font/font.ttf"), 19);
+ this.enabled = true;
+ this.visible = true;
+ }
+
+ @Override
+ protected int getHoverState(final boolean flag) {
+ byte byte0 = 1;
+ if (!this.enabled) {
+ byte0 = 0;
+ }
+ else if (flag) {
+ byte0 = 2;
+ }
+ return byte0;
+ }
+
+ @Override
+ public void drawButton(final Minecraft mc, final int mouseX, final int mouseY) {
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ int j = -1;
+ if (this.hovered) {
+ j = 35071;
+ }
+ if (!this.hovered) {
+ this.fade = 230;
+ }
+ else {
+ if (this.fade <= 50) {
+ return;
+ }
+ if (this.fade != 160) {
+ this.fade -= 10;
+ }
+ }
+ if (!this.hovered) {
+ this.fade2 = 200;
+ }
+ else {
+ if (this.fade2 <= 30) {
+ return;
+ }
+ if (this.fade2 != 200) {
+ this.fade2 += 10;
+ }
+ }
+ final float b = (float)(this.hovered ? new Color(30, 0, 0, 100).getRGB() : new Color(30, 0, 0, 30).getRGB());
+ final Color a = new Color(15, 0, 0, this.fade);
+ final Color a2 = new Color(100, 0, 0, this.fade2);
+ final Color a3 = new Color(80, 0, 0, this.fade);
+ if (this.xPosition >= this.xPosition && this.yPosition >= this.yPosition && this.xPosition < this.xPosition + this.width && this.yPosition < this.yPosition + this.height) {
+ final int n = 10;
+ final FontRenderer fr = mc.fontRendererObj;
+ //this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ //this.drawRoundedRect(this.xPosition - 1, this.yPosition - 1, this.width + 2, this.height + 2, 3, a);
+ //this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a2);
+ //this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a3);
+ if(this.hovered) {
+ //GlStateManager.color(0.0f, 0.0f, 0.0f);
+ } else {
+ //GlStateManager.color(1.0f, 1.0f, 1.0f);
+ }
+ //DrawUtil.draw2DImage(new ResourceLocation("Animeware/nightskywhite.png"), this.width / 2 - 189 + 3, this.height / 2 - 112 + 3, 30, 30, Color.WHITE);
+
+
+ //DrawUtil.draw2DImage(new ResourceLocation("Animeware/nightskywhite.png"), this.xPosition + 3, this.yPosition + 3, 27, 27, Color.WHITE);
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/logonobg.png"), this.xPosition- 4, this.yPosition - 3, 36, 35, Color.WHITE);
+ //Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/nightskywhite.png"));
+ //Gui.drawModalRectWithCustomSizedTexture(this.xPosition + 3, this.yPosition + 3, 0.0f, 1.0f, 30, 30, 30.0f, 30.0f);
+ //GlStateManager.disableDepth();
+ this.fr.drawString(this.displayString, this.xPosition + this.width / 3 + 20, this.yPosition + (this.height - 21) / 2, new Color(255, 255, 255, 255).getRGB());
+ this.fr.drawString(NightSky.INSTANCE.VERSIONSIMPLE, this.xPosition + this.width / 3 + 20, this.yPosition + (this.height - 2) / 2, new Color(255, 255, 255, 255).getRGB());
+
+ }
+ }
+
+ private void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 370, 560, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 280, 370, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 880, color);
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+}
diff --git a/src/minecraft/animeware/ui/comp/MainMenuBtn.java b/src/minecraft/animeware/ui/comp/MainMenuBtn.java
new file mode 100644
index 0000000..29624eb
--- /dev/null
+++ b/src/minecraft/animeware/ui/comp/MainMenuBtn.java
@@ -0,0 +1,126 @@
+package animeware.ui.comp;
+
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.client.renderer.Tessellator;
+import org.lwjgl.opengl.GL11;
+
+import animeware.util.font.FontUtil;
+import animeware.util.font.TenaFontUtil;
+import animeware.util.render.RoundedUtils;
+
+import java.io.File;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.client.renderer.GlStateManager;
+import java.awt.Color;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiButton;
+
+public class MainMenuBtn extends GuiButton
+{
+ private int j6;
+ private int j10;
+ int fade;
+ int fade2;
+
+
+ public MainMenuBtn(final int i, final int j, final int k, final String s) {
+ this(i, j, k, 200, 21, s);
+
+ }
+
+ public MainMenuBtn(final int i, final int j, final int k, final int l, final int i1, final String s) {
+ super(i, j, k, l, i1, s);
+ this.enabled = true;
+ this.visible = true;
+ }
+
+ @Override
+ protected int getHoverState(final boolean flag) {
+ byte byte0 = 1;
+ if (!this.enabled) {
+ byte0 = 0;
+ }
+ else if (flag) {
+ byte0 = 2;
+ }
+ return byte0;
+ }
+
+ @Override
+ public void drawButton(final Minecraft mc, final int mouseX, final int mouseY) {
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ int j = -1;
+ if (this.hovered) {
+ j = new Color(0,210,220,0).getRGB();
+ }
+
+ final float b = (float)(this.hovered ? new Color(0, 0, 255, 255).getRGB() : new Color(0, 0, 255, 255).getRGB());
+ final Color c = new Color(0, 0, 5, 70);
+ final Color a2 = new Color(100, 0, 0, this.fade2);
+ final Color a3 = new Color(80, 0, 0, this.fade);
+ float f = this.hovered ? new Color(153, 9, 193).getRGB() : new Color(255,255,255,255).getRGB();
+ Color a = new Color(0,0,0, this.fade);
+ if (this.xPosition >= this.xPosition && this.yPosition >= this.yPosition && this.xPosition < this.xPosition + this.width && this.yPosition < this.yPosition + this.height) {
+ final int n = 5;
+ final FontRenderer fr = mc.fontRendererObj;
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ if(!hovered) {
+ this.fade = 90;
+ }
+ else {
+ if(this.fade <= 30) {
+ return;
+ }
+ if(this.fade != 130) {
+ this.fade += 5;
+ }
+ }
+ //this.drawRoundedRect(this.xPosition - 1, this.yPosition - 1, this.width + 2, this.height + 2, 3, a2);
+ //this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a3);
+ this.drawRoundedRect(this.xPosition, this.yPosition, this.width, this.height, 3, a);
+ RoundedUtils.drawRoundedOutline(this.xPosition, this.yPosition, this.xPosition + 200, this.yPosition + 20, 8.0F, 2, new Color(0, 0, 0, 255).getRGB()); //this.width / 2 - 94, this.height / 2 + 5, this.width / 2 + 116, this.height / 2 + 85, 18.0F, 2, new Color(0, 140, 170, 255).getRGB()
+ GlStateManager.color(1.0f, 0.0f, 0.0f);
+ //Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/icons/logo.png"));
+ //Gui.drawModalRectWithCustomSizedTexture(this.xPosition + 3, this.yPosition + 3, 0.0f, 0.0f, 15, 15, 15.0f, 15.0f);
+ FontUtil.normal.drawCenteredString(this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 5) / 2, j);
+ //FontUtil.tenacity.drawSmoothString(this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 5) / 2, j);
+ //TenaFontUtil.tenacityBoldFont40.drawString(this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 5) / 2, j);
+ }
+ }
+
+ public void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 270, 360, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 180, 270, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 180, color);
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+}
diff --git a/src/minecraft/animeware/ui/comp/PositioningCGButton.java b/src/minecraft/animeware/ui/comp/PositioningCGButton.java
new file mode 100644
index 0000000..96bae98
--- /dev/null
+++ b/src/minecraft/animeware/ui/comp/PositioningCGButton.java
@@ -0,0 +1,123 @@
+//
+// Decompiled by Procyon v0.5.36
+//
+
+package animeware.ui.comp;
+
+import java.awt.Color;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.gui.clickgui.ClickGUI;
+import animeware.gui.clickgui.GUIType;
+import animeware.util.font.ucfont.UCFontRenderer;
+import animeware.util.render.ColorMode;
+import animeware.util.render.DrawUtil;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.util.ResourceLocation;
+
+public class PositioningCGButton extends GuiButton
+{
+ private int j6;
+ private int j10;
+ int fade;
+ int fade2;
+ private final UCFontRenderer fr;
+
+ public PositioningCGButton(final int i, final int j, final int k, final String s) {
+ this(i, j, k, 95, 27, s);
+
+ }
+
+ public PositioningCGButton(final int i, final int j, final int k, final int l, final int i1, final String s) {
+ super(i, j, k, l, i1, s);
+ this.fr = new UCFontRenderer(new ResourceLocation("Animeware/font/font.ttf"), 19);
+ this.enabled = true;
+ this.visible = true;
+ }
+
+ @Override
+ protected int getHoverState(final boolean flag) {
+ byte byte0 = 1;
+ if (!this.enabled) {
+ byte0 = 0;
+ }
+ else if (flag) {
+ byte0 = 2;
+ }
+ return byte0;
+ }
+
+ @Override
+ public void drawButton(final Minecraft mc, final int mouseX, final int mouseY) {
+ final float b = (float)(this.hovered ? new Color(30, 0, 0, 100).getRGB() : new Color(30, 0, 0, 30).getRGB());
+ final Color a = new Color(15, 0, 0, this.fade);
+ final Color a2 = new Color(100, 0, 0, this.fade2);
+ final Color a3 = new Color(80, 0, 0, this.fade);
+ if (this.xPosition >= this.xPosition && this.yPosition >= this.yPosition && this.xPosition < this.xPosition + this.width && this.yPosition < this.yPosition + this.height) {
+ final int n = 10;
+ final FontRenderer fr = mc.fontRendererObj;
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ if(!hovered) {
+ this.fade = 128;
+ }
+ else {
+ if(this.fade <= 30) {
+ return;
+ }
+ if(this.fade <= 250) {
+ this.fade += 5;
+ }
+ }
+ int f = 160;
+ if(ClickGUI.type == GUIType.CLICK || this.hovered) {
+ this.fr.drawCenteredString(this.displayString, this.xPosition + this.width / 3 + 21, this.yPosition + (this.height - 8) / 2, new Color(this.fade, this.fade, this.fade, 255).getRGB());
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/positioning.png"), this.xPosition, this.yPosition, 25, 25, new Color( this.fade, this.fade, this.fade, 255));
+ } else {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/positioning.png"), this.xPosition, this.yPosition, 25, 25, Color.gray);
+ this.fr.drawCenteredString(this.displayString, this.xPosition + this.width / 3 + 21, this.yPosition + (this.height - 8) / 2, new Color(128, 128, 128).getRGB());
+ }
+ }
+ }
+
+
+ private void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 370, 560, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 280, 370, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 880, color);
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+}
diff --git a/src/minecraft/animeware/ui/comp/SettingsCGButton.java b/src/minecraft/animeware/ui/comp/SettingsCGButton.java
new file mode 100644
index 0000000..b6918e6
--- /dev/null
+++ b/src/minecraft/animeware/ui/comp/SettingsCGButton.java
@@ -0,0 +1,124 @@
+//
+// Decompiled by Procyon v0.5.36
+//
+
+package animeware.ui.comp;
+
+import java.awt.Color;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.gui.clickgui.ClickGUI;
+import animeware.gui.clickgui.GUIType;
+import animeware.util.font.ucfont.UCFontRenderer;
+import animeware.util.render.ColorMode;
+import animeware.util.render.DrawUtil;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.util.ResourceLocation;
+
+public class SettingsCGButton extends GuiButton
+{
+ private int j6;
+ private int j10;
+ int fade;
+ int fade2;
+ private final UCFontRenderer fr;
+
+ public SettingsCGButton(final int i, final int j, final int k, final String s) {
+ this(i, j, k, 95, 27, s);
+
+ }
+
+ public SettingsCGButton(final int i, final int j, final int k, final int l, final int i1, final String s) {
+ super(i, j, k, l, i1, s);
+ this.fr = new UCFontRenderer(new ResourceLocation("Animeware/font/font.ttf"), 19);
+ this.enabled = true;
+ this.visible = true;
+ }
+
+ @Override
+ protected int getHoverState(final boolean flag) {
+ byte byte0 = 1;
+ if (!this.enabled) {
+ byte0 = 0;
+ }
+ else if (flag) {
+ byte0 = 2;
+ }
+ return byte0;
+ }
+
+ @Override
+ public void drawButton(final Minecraft mc, final int mouseX, final int mouseY) {
+ final float b = (float)(this.hovered ? new Color(30, 0, 0, 100).getRGB() : new Color(30, 0, 0, 30).getRGB());
+ final Color a = new Color(15, 0, 0, this.fade);
+ final Color a2 = new Color(100, 0, 0, this.fade2);
+ final Color a3 = new Color(80, 0, 0, this.fade);
+ if (this.xPosition >= this.xPosition && this.yPosition >= this.yPosition && this.xPosition < this.xPosition + this.width && this.yPosition < this.yPosition + this.height) {
+ final int n = 10;
+ final FontRenderer fr = mc.fontRendererObj;
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ if(!hovered) {
+ this.fade = 128;
+ }
+ else {
+ if(this.fade <= 30) {
+ return;
+ }
+ if(this.fade <= 250) {
+ this.fade += 5;
+ }
+ }
+ int f = 160;
+ if(ClickGUI.type == GUIType.CLICK || this.hovered) {
+ this.fr.drawCenteredString(this.displayString, this.xPosition + this.width / 3 + 15, this.yPosition + (this.height - 8) / 2, new Color(this.fade, this.fade, this.fade, 255).getRGB());
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/settings.png"), this.xPosition, this.yPosition, 25, 25, new Color( this.fade, this.fade, this.fade, 255));
+ } else {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/settings.png"), this.xPosition, this.yPosition, 25, 25, Color.gray);
+ this.fr.drawCenteredString(this.displayString, this.xPosition + this.width / 3 + 15, this.yPosition + (this.height - 8) / 2, new Color(128, 128, 128).getRGB());
+ }
+ }
+ }
+
+
+ private void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 370, 560, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 280, 370, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 880, color);
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+
+}
diff --git a/src/minecraft/animeware/ui/comp/ToggleableCGButton.java b/src/minecraft/animeware/ui/comp/ToggleableCGButton.java
new file mode 100644
index 0000000..0ab2dc4
--- /dev/null
+++ b/src/minecraft/animeware/ui/comp/ToggleableCGButton.java
@@ -0,0 +1,123 @@
+//
+// Decompiled by Procyon v0.5.36
+//
+
+package animeware.ui.comp;
+
+import java.awt.Color;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.gui.clickgui.ClickGUI;
+import animeware.gui.clickgui.GUIType;
+import animeware.util.font.ucfont.UCFontRenderer;
+import animeware.util.render.ColorMode;
+import animeware.util.render.DrawUtil;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.util.ResourceLocation;
+
+public class ToggleableCGButton extends GuiButton
+{
+ private int j6;
+ private int j10;
+ int fade;
+ int fade2;
+ private final UCFontRenderer fr;
+
+ public ToggleableCGButton(final int i, final int j, final int k, final String s) {
+ this(i, j, k, 95, 27, s);
+
+ }
+
+ public ToggleableCGButton(final int i, final int j, final int k, final int l, final int i1, final String s) {
+ super(i, j, k, l, i1, s);
+ this.fr = new UCFontRenderer(new ResourceLocation("Animeware/font/font.ttf"), 19);
+ this.enabled = true;
+ this.visible = true;
+ }
+
+ @Override
+ protected int getHoverState(final boolean flag) {
+ byte byte0 = 1;
+ if (!this.enabled) {
+ byte0 = 0;
+ }
+ else if (flag) {
+ byte0 = 2;
+ }
+ return byte0;
+ }
+
+ @Override
+ public void drawButton(final Minecraft mc, final int mouseX, final int mouseY) {
+ final float b = (float)(this.hovered ? new Color(30, 0, 0, 100).getRGB() : new Color(30, 0, 0, 30).getRGB());
+ final Color a = new Color(15, 0, 0, this.fade);
+ final Color a2 = new Color(100, 0, 0, this.fade2);
+ final Color a3 = new Color(80, 0, 0, this.fade);
+ if (this.xPosition >= this.xPosition && this.yPosition >= this.yPosition && this.xPosition < this.xPosition + this.width && this.yPosition < this.yPosition + this.height) {
+ final int n = 10;
+ final FontRenderer fr = mc.fontRendererObj;
+ this.hovered = (mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height);
+ if(!hovered) {
+ this.fade = 128;
+ }
+ else {
+ if(this.fade <= 30) {
+ return;
+ }
+ if(this.fade <= 250) {
+ this.fade += 5;
+ }
+ }
+ int f = 160;
+ if(ClickGUI.type == GUIType.CLICK || this.hovered) {
+ this.fr.drawCenteredString(this.displayString, this.xPosition + this.width / 3 + 17, this.yPosition + (this.height - 8) / 2, new Color(this.fade, this.fade, this.fade, 255).getRGB());
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/togglesprint.png"), this.xPosition, this.yPosition, 25, 25, new Color( this.fade, this.fade, this.fade, 255));
+ } else {
+ DrawUtil.draw2DImage(new ResourceLocation("Animeware/icons/togglesprint.png"), this.xPosition, this.yPosition, 25, 25, Color.gray);
+ this.fr.drawCenteredString(this.displayString, this.xPosition + this.width / 3 + 17, this.yPosition + (this.height - 8) / 2, new Color(128, 128, 128).getRGB());
+ }
+ }
+ }
+
+ private void drawRoundedRect(final int x, final int y, final int width, final int height, final int cornerRadius, final Color color) {
+ Gui.drawRect(x, y + cornerRadius, x + cornerRadius, y + height - cornerRadius, color.getRGB());
+ Gui.drawRect(x + cornerRadius, y, x + width - cornerRadius, y + height, color.getRGB());
+ Gui.drawRect(x + width - cornerRadius, y + cornerRadius, x + width, y + height - cornerRadius, color.getRGB());
+ this.drawArc(x + cornerRadius, y + cornerRadius, cornerRadius, 0, 90, color);
+ this.drawArc(x + width - cornerRadius, y + cornerRadius, cornerRadius, 370, 560, color);
+ this.drawArc(x + width - cornerRadius, y + height - cornerRadius, cornerRadius, 280, 370, color);
+ this.drawArc(x + cornerRadius, y + height - cornerRadius, cornerRadius, 90, 880, color);
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+
+}
diff --git a/src/minecraft/animeware/ui/comp/clickgui/ModButton.java b/src/minecraft/animeware/ui/comp/clickgui/ModButton.java
new file mode 100644
index 0000000..52a3ba4
--- /dev/null
+++ b/src/minecraft/animeware/ui/comp/clickgui/ModButton.java
@@ -0,0 +1,208 @@
+package animeware.ui.comp.clickgui;
+
+import java.awt.Color;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.gui.clickgui.ClickGUI;
+import animeware.gui.clickgui.GUIType;
+import animeware.gui.clickgui.SettingsGUI;
+import animeware.hud.mod.HudMod;
+import animeware.ui.themes.impl.ThemeManager;
+import animeware.util.font.FontUtil;
+import animeware.util.notification.Notification;
+import animeware.util.notification.NotificationManager;
+import animeware.util.notification.NotificationType;
+import animeware.util.render.ColorUtils;
+import animeware.util.render.DrawUtil;
+import animeware.util.render.RoundedUtils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+
+public class ModButton {
+
+ public int x, y, w, h;
+ public HudMod m;
+ private boolean enabled;
+ boolean allowClick;
+ boolean allowDraw;
+ public static boolean settings;
+
+ int width = GuiScreen.width;
+ int height = GuiScreen.height;
+
+ Minecraft mc = Minecraft.getMinecraft();
+
+ public ModButton(int x, int y, int w, int h, HudMod m) {
+ this.x = x;
+ this.y = y;
+ this.w = w;
+ this.h = h;
+ this.m = m;
+ this.enabled = false;
+
+ }
+ public ModButton() {
+
+ }
+
+ public void draw() {
+
+ Gui.drawRect(x, y, x + w, y + h, new Color(0, 0, 0, 0).getRGB());
+ //RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 90, y + h, 18.0F, new Color(40, 40, 45, 255).getRGB());
+ //RoundedUtils.drawSmoothRoundedRect(x, y, x + w, y + h, 18.0F, new Color(50, 50, 55, 155).getRGB()); //70, 70, 75, 155
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w, y + h, 12.0F, new Color(26, 26, 26, 255).getRGB());
+ RoundedUtils.drawSmoothRoundedRect(x + 105, y + 18, x + w -6, y + h - 18, 4.0F, new Color(40, 40, 40, 255).getRGB());
+ if(m.isEnabled()) {
+ if(ThemeManager.astolfoBtn == true) {
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 288, y + h, 18.0F, ColorUtils.astolfoColors(10, 100, 1000L));
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 290, y + h, 18.0F, ColorUtils.astolfoColors(10, 100, 900L));
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 292, y + h, 18.0F, ColorUtils.astolfoColors(10, 100, 800L));
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 296, y + h, 18.0F, ColorUtils.astolfoColors(10, 100, 700L));
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 300, y + h, 18.0F, ColorUtils.astolfoColors(10, 100, 600L));
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 302, y + h, 18.0F, ColorUtils.astolfoColors(10, 100, 500L));
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 304, y + h, 18.0F, ColorUtils.astolfoColors(10, 100, 400L));
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 306, y + h, 18.0F, ColorUtils.astolfoColors(10, 100, 300L));
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 308, y + h, 18.0F, ColorUtils.astolfoColors(10, 100, 200L));
+
+ } else {
+ this.drawCircle(x + 109, y + 16, 8, 8, new Color(0, 255, 255));
+
+ //RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 288, y + h, 18.0F, new Color(0, 150, 200, 255).getRGB());
+ //RoundedUtils.drawRoundedGradientRectCorner(x, y, x + w - 190, y + h, 18.0F, new Color(0, 150, 200, 255).getRGB(), new Color(50, 100, 200, 255).getRGB(), new Color(100, 50, 200, 255).getRGB(), new Color(150, 0, 200, 255).getRGB());
+
+ }
+ //RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 190, y + h, 18.0F, new Color(0, 150, 200, 255).getRGB());
+ //RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 190, y + h, 18.0F, new Color(0, 0, 0, 155).getRGB());
+ //DrawUtil.drawRoundedRect(x - 1, y - 5, x + w + 1, y + h + 1, 7 , new Color(200, 0, 0, 100).getRGB());
+ }else {
+ this.drawCircle(x + 100, y + 16, 8, 8, new Color(100,100,100));
+ //RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 288, y + h, 18.0F, new Color(50, 50, 55, 255).getRGB());
+ //DrawUtil.drawRoundedRect(x - 1, y - 5, x + w + 1, y + h + 1, 7 , new Color(105, 105, 105, 100).getRGB());
+ }
+ FontUtil.normal.drawString(m.name, x + 35, y + 12, getColor());
+ FontUtil.normal.drawString("Description", x + 35, y + 23, new Color(70, 70, 75, 255).getRGB());
+ //FontUtil.normal.drawString(m.description, x + 35, y + 23, new Color(70, 70, 75, 255).getRGB());
+
+ if(!m.getIcon().getResourcePath().equals("")) {
+ DrawUtil.draw2DImage(m.getIcon(), x + 5, y + 3, 30, 30, Color.WHITE);
+ }
+ /*int yAdd1 = 0;
+ if(m.expanded)
+ for (Setting set : m.settings) {
+
+ if(set instanceof BooleanSetting) {
+ ClickGUI.settingButtons.add(new SettingButton(this.width / 2 + 100, this.height / 2 - 90 + yAdd1, 60, 20, set));
+ yAdd1 += 40;
+ }
+
+ }*/
+
+ //GuiScreen.buttonList.add(new SettingsCGButton(2, 262, height / 3 - 10, ""));
+ //Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation ("Animeware/background/logo.png"));
+
+ }
+
+
+ private int getColor() {
+ if(m.isEnabled()) {
+ return new Color(155, 155, 155, 250).getRGB();
+ }else {
+ return new Color(155, 155, 155, 250).getRGB();
+ }
+
+ }
+
+ public void onClick(int mouseX, int mouseY, int Button) {
+
+ if(mouseX >= x && mouseX <= x + w && mouseY >= y && mouseY <= y +h) {
+ if(Button == 0) {
+ m.toggle();
+
+ if(m.enabled) {
+ NotificationManager.show(new Notification(NotificationType.SUCCESS, m.name, m.name + " was enabled.", m.icon, 1));
+ } else if(!m.enabled) {
+ NotificationManager.show(new Notification(NotificationType.FAIL, m.name, m.name + " was disabled.", m.icon, 1));
+ }else {
+
+ }
+
+ System.out.println(this.getModNameToggle());
+ }
+ if(mouseX >= x && mouseX <= x + w && mouseY >= y && mouseY <= y +h) {
+ if(Button == 1) {
+
+ //ClickGUI.settings = true;
+ //for(HudMod m : HudManager.hudMods) {
+ //if(m.settings.size()>0)
+ //m.expand();
+
+ //}
+
+ }
+ if(Button == 1) {
+ if(m.settings.size()>0 && m.name == "Color Scheme" || m.settings.size()>0 && m.name == "FPS") //HitColor
+ //if(!m.expanded) {
+ //m.expand();
+ //} else {
+ //m.deexpand();
+ //}
+
+
+ //mc.displayGuiScreen(new SettingsGUI(m, new ClickGUI(), x, y));
+ //mc.displayGuiScreen(new SettingsGUI(m));
+ ClickGUI.type = GUIType.SETTINGS;
+ mc.displayGuiScreen(new ClickGUI(m));
+ settings = true;
+ }
+
+ }
+
+ }
+
+
+
+ }
+ private String getModNameToggle() {
+ //NotificationManager.show(new Notification(NotificationType.SUCCESS, name, name + " was enabled.", 1));
+ if(m.enabled) {
+ return m.name + ": enabled";
+ } else if(!m.enabled) {
+ return m.name + ": disabled";
+ }else {
+ return m.name;
+ }
+ }
+
+ private String getModName() {
+ return m.name;
+ }
+
+ private void drawArc(final int x, final int y, final int radius, final int startAngle, final int endAngle, final Color color) {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f(color.getRed() / 255.0f, color.getGreen() / 255.0f, color.getBlue() / 255.0f, color.getAlpha() / 255.0f);
+ final WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ worldRenderer.begin(6, DefaultVertexFormats.POSITION);
+ worldRenderer.pos(x, y, 0.0).endVertex();
+ for (int i = (int)(startAngle / 360.0 * 100.0); i <= (int)(endAngle / 360.0 * 100.0); ++i) {
+ final double angle = 6.283185307179586 * i / 100.0 + Math.toRadians(180.0);
+ worldRenderer.pos(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0.0).endVertex();
+ }
+ Tessellator.getInstance().draw();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+ private void drawCircle(final int x, final int y, final int width, final int height, final Color color) {
+ this.drawArc(x + width, y + height / 2, width / 2, 0, 360, color);
+ }
+
+}
diff --git a/src/minecraft/animeware/ui/comp/clickgui/SettingButton.java b/src/minecraft/animeware/ui/comp/clickgui/SettingButton.java
new file mode 100644
index 0000000..b1626ce
--- /dev/null
+++ b/src/minecraft/animeware/ui/comp/clickgui/SettingButton.java
@@ -0,0 +1,165 @@
+package animeware.ui.comp.clickgui;
+
+import java.awt.Color;
+
+import animeware.NightSky;
+import animeware.util.font.FontUtil;
+import animeware.util.font.MinecraftFontRenderer;
+import animeware.util.settings.BooleanSetting;
+import animeware.util.settings.ModeSetting;
+import animeware.util.settings.NumberSetting;
+import animeware.util.settings.Setting;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.util.MathHelper;
+
+public class SettingButton {
+
+ public int x, y, w, h;
+ public Setting set;
+ public boolean isSliding = false;
+ public double val;
+ int anim=0,anim2=0;
+
+ public SettingButton(int x, int y, int w, int h, Setting set) {
+ this.x = x;
+ this.y = y;
+ this.w = w;
+ this.h = h;
+ this.set = set;
+ }
+
+ public void draw(int mouseX, int mouseY) {
+ MinecraftFontRenderer fr = FontUtil.normal;
+
+ if(set instanceof BooleanSetting) {
+ fr.drawString(set.name, x, y+h / 2 - fr.getHeight() / 2, -1);
+
+ Gui.drawRect(x + fr.getStringWidth(set.name) + 4, y + 2.5f, x + fr.getStringWidth(set.name) + 15 + 4, y + h - 2.5f, new Color(117, 117, 117).getRGB());
+
+ if(((BooleanSetting) set).isEnabled()) {
+ Gui.drawRect(x + fr.getStringWidth(set.name) + 6, y + 4.5f, x+fr.getStringWidth(set.name) + 15 + 2, y + h - 4.5f, NightSky.getMainColor().getRGB());
+ }
+ }
+
+ if(set instanceof ModeSetting) {
+ fr.drawString(set.name + ": " + ((ModeSetting) set).getMode(), x, y+h / 2 - fr.getHeight() / 2, -1);
+ }
+ if(set instanceof NumberSetting){
+
+ boolean hovered = (mouseX >= x && mouseX <= x + w && mouseY >= y && mouseY <= y + h);
+ NumberSetting ns = (NumberSetting) set;
+ if(isSliding){
+ float value = (float)(mouseX - (x)) / (float)((w)/ns.getMaximum());
+ value = (float) MathHelper.clamp_double(value, ns.getMinimum(), ns.getMaximum());
+ val = (float)(mouseX - (x)) / (float)((w)/ns.getMaximum());
+ val = (float) MathHelper.clamp_double(value, ns.getMinimum(), ns.getMaximum());
+ //float f = this.denormalizeValue(value);
+ ns.setValue(val);
+ //value = this.normalizeValue(f);
+ }
+
+
+ Gui.drawRect(x, y + h - 3, x + w, y + h, new Color(117, 117, 117).getRGB());
+ if(anim2 > 0)anim2-=4;
+
+ Gui.drawRect(x, y + h - 3, (x+(ns.getValue()/ns.getMaximum()*w)), (y + h), NightSky.getMainColor().getRGB());
+
+ fr.drawString("" + ns.getValue(), (x+(ns.getValue()/ns.getMaximum()*w)) - fr.getStringWidth("" + ns.getValue()), y + h + 2, -1);
+
+
+ fr.drawString(set.name, x, y+h/4, -1);
+ }
+
+ }
+
+ public void onClick(int mouseX, int mouseY, int button) {
+ if(set instanceof BooleanSetting) {
+ if(mouseX >= x + FontUtil.normal.getStringWidth(set.name) + 4 && mouseX <= x + FontUtil.normal.getStringWidth(set.name) + 4 + 15 && mouseY >= y && mouseY <= y + h) {
+ ((BooleanSetting) set).setEnabled(!((BooleanSetting) set).isEnabled());
+ }
+ }
+
+ if(set instanceof ModeSetting) {
+ if(mouseX >= x && mouseX <= x + FontUtil.normal.getStringWidth(set.name + ((ModeSetting) set).getMode()) && mouseY >= y && mouseY <= y + h) {
+ //((ModeSetting) set).increment();
+ }
+ }
+ if(set instanceof NumberSetting) {
+ if(mouseX >= x && mouseX <= x + w && mouseY >= y && mouseY <= y + h) {
+ this.isSliding = true;
+ }
+ }
+ }
+
+ public void onRelease(int mouseX, int mouseY, int state) {
+ isSliding = false;
+ }
+
+}
+
+/*package animeware.ui.comp.clickgui;
+
+import java.awt.Color;
+import java.io.IOException;
+
+import animeware.hud.mod.HudMod;
+import animeware.ui.comp.setting.BooleanSetting;
+import animeware.ui.comp.setting.ModeSetting;
+import animeware.ui.comp.setting.NumberSetting;
+import animeware.ui.comp.setting.Setting;
+import animeware.util.font.FontUtil;
+import animeware.util.font.MinecraftFontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.util.MathHelper;
+
+public class SettingButton {
+
+ public int x, y, w, h;
+ //public Setting set;
+ HudMod m;
+ GuiScreen gui;
+ Setting s;
+ String str;
+ public boolean isSliding = false;
+ public double val;
+ int anim=0,anim2=0;
+
+ public SettingButton(int x, int y, int w, int h, String str) {
+ this.x = x;
+ this.y = y;
+ this.w = w;
+ this.h = h;
+ this.str = str;
+ }
+
+ public void draw(int mouseX, int mouseY) {
+ int index = 0;
+ for(Setting s : m.settings) {
+ if(((BooleanSetting)s).enabled) {
+ FontUtil.normal.drawStringWithShadow(Setting.name, x, y + index, new Color(0, 0, 255, 255).getRGB());
+ } else {
+ FontUtil.normal.drawStringWithShadow(Setting.name, x, y + index, -1);
+ }
+ //drawRect(100,100+index,100+60,100+20,-1);
+ index+=24;
+ }
+
+ }
+
+ protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException {
+ int index = 0;
+ for(Setting s : m.settings) {
+ //if(mouseX >= x && mouseX <= x + w && mouseY >= y && mouseY <= y +h) {
+ if(mouseX >= x && mouseX <= x + w && mouseY >=y + index && mouseY <= y + h +index)
+ ((BooleanSetting)s).enabled = !((BooleanSetting)s).enabled;
+ index+=24;
+ }
+ //super.mouseClicked(mouseX, mouseY, mouseButton);
+ }
+
+ public void onRelease(int mouseX, int mouseY, int state) {
+ isSliding = false;
+ }
+
+}*/
\ No newline at end of file
diff --git a/src/minecraft/animeware/ui/comp/clickgui/SettingFrame.java b/src/minecraft/animeware/ui/comp/clickgui/SettingFrame.java
new file mode 100644
index 0000000..138f463
--- /dev/null
+++ b/src/minecraft/animeware/ui/comp/clickgui/SettingFrame.java
@@ -0,0 +1,26 @@
+package animeware.ui.comp.clickgui;
+
+import animeware.hud.mod.HudMod;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiScreen;
+
+public class SettingFrame extends GuiScreen {
+
+ int x, y, width, height;
+ int mouseX, mouseY;
+
+ Minecraft mc = Minecraft.getMinecraft();
+ //public static VoyageFontFromAsset font = new VoyageFontFromAsset(new ResourceLocation("Voyage/font/AntipastoPro-DemiBold_trial.ttf"), 23.0F);
+
+ public SettingFrame(HudMod mod, int x, int y) {
+ this.x = x;
+ this.y = y;
+ this.width = 395;
+ this.height = 300;
+ }
+
+
+ public void render(int mouseX, int mouseY) {
+ //DrawUtil.drawRoundedRect(x, y, x + width, y + height, 10, new Color(0, 0, 0, 75).getRGB());
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/ui/cosmetic.zip b/src/minecraft/animeware/ui/cosmetic.zip
new file mode 100644
index 0000000..e067d5e
Binary files /dev/null and b/src/minecraft/animeware/ui/cosmetic.zip differ
diff --git a/src/minecraft/animeware/ui/cosmeticgui.zip b/src/minecraft/animeware/ui/cosmeticgui.zip
new file mode 100644
index 0000000..9f92f80
Binary files /dev/null and b/src/minecraft/animeware/ui/cosmeticgui.zip differ
diff --git a/src/minecraft/animeware/ui/login/Comp/Microsoft.java b/src/minecraft/animeware/ui/login/Comp/Microsoft.java
new file mode 100644
index 0000000..502a68f
--- /dev/null
+++ b/src/minecraft/animeware/ui/login/Comp/Microsoft.java
@@ -0,0 +1,21 @@
+package animeware.ui.login.Comp;
+
+import fr.litarvan.openauth.microsoft.MicrosoftAuthResult;
+import fr.litarvan.openauth.microsoft.MicrosoftAuthenticationException;
+import fr.litarvan.openauth.microsoft.MicrosoftAuthenticator;
+
+public class Microsoft {
+
+ private void initGui() throws MicrosoftAuthenticationException {
+ MicrosoftAuthenticator authenticator = new MicrosoftAuthenticator();
+ MicrosoftAuthResult result = authenticator.loginWithWebview();
+ // Or using a webview: authenticator.loginWithWebView();
+ // Or using refresh token: authenticator.loginWithRefreshToken("refresh token");
+ // Or using your own way: authenticator.loginWithTokens("access token", "refresh token");
+
+ System.out.printf("Logged in with '%s'%n", result.getProfile().getName());
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/ui/login/LoginScreen.java b/src/minecraft/animeware/ui/login/LoginScreen.java
new file mode 100644
index 0000000..fa8dac9
--- /dev/null
+++ b/src/minecraft/animeware/ui/login/LoginScreen.java
@@ -0,0 +1,160 @@
+package animeware.ui.login;
+
+import java.awt.Color;
+import java.io.IOException;
+
+import org.lwjgl.input.Keyboard;
+
+import animeware.NightSky;
+import animeware.gui.alt.Alt;
+import animeware.gui.alt.AltLoginThread;
+import animeware.gui.mainmenu.AltButton;
+import animeware.gui.mainmenu.ClassicButton;
+import animeware.gui.mainmenu.MainMenu;
+import animeware.gui.mainmenu.MicrosoftButton;
+import animeware.gui.mainmenu.QuitButton;
+import animeware.ui.comp.MainMenuBtn;
+import animeware.util.account.SessionChanger;
+import animeware.util.font.FontUtil;
+import animeware.util.render.DrawUtil;
+import animeware.util.render.RoundedUtils;
+import animeware.util.websockets.SocketClient;
+import animeware.util.websockets.user.CheckName;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.GuiTextField;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.util.EnumChatFormatting;
+
+public final class LoginScreen extends GuiScreen {
+ private PasswordField password;
+ private GuiScreen previousScreen;
+ //private UserLoginThread thread;
+ public static GuiTextField username;
+ public AltLoginThread loginThread;
+ public Alt selectedAlt = null;
+ private AltLoginThread thread;
+
+ public LoginScreen() {
+ this.previousScreen = previousScreen;
+ }
+
+ @Override
+ protected void actionPerformed(GuiButton button) {
+ switch (button.id) {
+ case 0: {
+ if(this.username.getText() == "" && this.password.getText() == "" || this.username.getText() == " " && this.password.getText() == " " || this.username.getText() == " " && this.password.getText() == "" || this.username.getText() == "" && this.password.getText() == " ") {
+ } else {
+
+ this.thread = new AltLoginThread(this.username.getText(), this.password.getText());
+ this.thread.start();
+ NightSky.mcname = this.username.getText();
+ }
+
+ break;
+ }
+ case 1: {
+ if(this.username.getText() == "" && this.password.getText() == "" || this.username.getText() == " " && this.password.getText() == " " || this.username.getText() == " " && this.password.getText() == "" || this.username.getText() == "" && this.password.getText() == " ") {
+ } else {
+
+ SessionChanger.getInstance().setUserMicrosoft(this.username.getText(), this.password.getText());
+ NightSky.mcname = this.username.getText();
+
+ }
+
+ break;
+ }
+ case 2: {
+ mc.displayGuiScreen(new MainMenu());
+ break;
+ }
+ }
+
+ }
+ @Override
+ public void initGui() {
+ this.username = new GuiTextField(height / 4 + 24, this.mc.fontRendererObj, this.width / 2 - 100, this.height / 2 - 20, 200, 20);
+ this.password = new PasswordField(this.mc.fontRendererObj, this.width / 2 - 100, this.height / 2 + 5, 200, 20);
+ this.buttonList.add(new MainMenuBtn(0, this.width / 2 - 100, this.height / 2 + 34, "Login"));
+ //this.buttonList.add(new MainMenuBtn(1, this.width / 2 - 100, this.height / 2 + 60, "Login with Microsoft"));
+
+ this.username.setFocused(true);
+ Keyboard.enableRepeatEvents(true);
+ }
+
+
+
+ @Override
+ public void drawScreen(int x2, int y2, float z2) {
+ //this.drawDefaultBackground();
+ ScaledResolution sr = new ScaledResolution(mc);
+ GlStateManager.enableAlpha();
+ GlStateManager.enableBlend();
+ //DrawUtil.drawRoundedRect(325, 90, sr.getScaledWidth() -310, sr.getScaledHeight() - 220, 10, new Color(30, 30, 30, 150).getRGB());
+ RoundedUtils.drawSmoothRoundedRect((this.width / 2 - 140), (this.height / 2 - 50), (this.width / 2 + 140), (this.height / 2 + 80), 18.0F, new Color(25, 25, 27, 255).getRGB());
+ this.username.drawTextBox();
+ this.password.drawTextBox();
+ //FontUtil.normal.drawCenteredString("Animeware Client Login", width / 2, 130, -1);
+ FontUtil.normal.drawCenteredString(this.thread == null ? (Object)((Object)EnumChatFormatting.GRAY) + "Idle..." : this.thread.getStatus(), width / 2, this.height / 2 - 39, -1);
+ if (this.username.getText().isEmpty()) {
+ FontUtil.normal.drawString("Mail", this.width / 2 - 98, this.height / 2 - 12, -7829368);
+ }
+ if (this.password.getText().isEmpty()) {
+ FontUtil.normal.drawString("Password", this.width / 2 - 98, this.height / 2 + 13, -1);
+ }
+
+ super.drawScreen(x2, y2, z2);
+ }
+
+
+
+ @Override
+ protected void keyTyped(char character, int key) {
+ try {
+ super.keyTyped(character, key);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ if (character == '\t') {
+ if (!this.username.isFocused() && !this.password.isFocused()) {
+ this.username.setFocused(true);
+ } else {
+ this.username.setFocused(this.password.isFocused());
+ this.password.setFocused(!this.username.isFocused());
+ }
+ }
+ if (character == '\r') {
+ this.actionPerformed((GuiButton)this.buttonList.get(0));
+ }
+ this.username.textboxKeyTyped(character, key);
+ this.password.textboxKeyTyped(character, key);
+ }
+
+ @Override
+ protected void mouseClicked(int x2, int y2, int button) {
+ try {
+ super.mouseClicked(x2, y2, button);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ this.username.mouseClicked(x2, y2, button);
+ this.password.mouseClicked(x2, y2, button);
+ }
+
+ @Override
+ public void onGuiClosed() {
+ Keyboard.enableRepeatEvents(false);
+ }
+
+ @Override
+ public void updateScreen() {
+ this.username.updateCursorCounter();
+ this.password.updateCursorCounter();
+ }
+
+
+}
+
diff --git a/src/minecraft/animeware/ui/login/PasswordField.java b/src/minecraft/animeware/ui/login/PasswordField.java
new file mode 100644
index 0000000..b7459c6
--- /dev/null
+++ b/src/minecraft/animeware/ui/login/PasswordField.java
@@ -0,0 +1,499 @@
+package animeware.ui.login;
+
+import net.minecraft.util.*;
+import net.minecraft.client.gui.*;
+import net.minecraft.client.*;
+import org.lwjgl.opengl.*;
+import net.minecraft.client.renderer.*;
+
+public class PasswordField extends Gui
+{
+ private final FontRenderer fontRenderer;
+ private final int xPos;
+ private final int yPos;
+ private final int width;
+ private final int height;
+ private String text;
+ private int maxStringLength;
+ private int cursorCounter;
+ private boolean enableBackgroundDrawing;
+ private boolean canLoseFocus;
+ public boolean isFocused;
+ private boolean isEnabled;
+ private int i;
+ private int cursorPosition;
+ private int selectionEnd;
+ private int enabledColor;
+ private int disabledColor;
+ private boolean b;
+
+ public PasswordField(final FontRenderer par1FontRenderer, final int par2, final int par3, final int par4, final int par5) {
+ this.text = "";
+ this.maxStringLength = 50;
+ this.enableBackgroundDrawing = true;
+ this.canLoseFocus = true;
+ this.isFocused = false;
+ this.isEnabled = true;
+ this.i = 0;
+ this.cursorPosition = 0;
+ this.selectionEnd = 0;
+ this.enabledColor = 14737632;
+ this.disabledColor = 7368816;
+ this.b = true;
+ this.fontRenderer = par1FontRenderer;
+ this.xPos = par2;
+ this.yPos = par3;
+ this.width = par4;
+ this.height = par5;
+ }
+
+ public void updateCursorCounter() {
+ ++this.cursorCounter;
+ }
+
+ public void setText(final String par1Str) {
+ if (par1Str.length() > this.maxStringLength) {
+ this.text = par1Str.substring(0, this.maxStringLength);
+ }
+ else {
+ this.text = par1Str;
+ }
+ this.setCursorPositionEnd();
+ }
+
+ public String getText() {
+ final String newtext = this.text.replaceAll(" ", "");
+ return newtext;
+ }
+
+ public String getSelectedtext() {
+ final int var1 = (this.cursorPosition < this.selectionEnd) ? this.cursorPosition : this.selectionEnd;
+ final int var2 = (this.cursorPosition < this.selectionEnd) ? this.selectionEnd : this.cursorPosition;
+ return this.text.substring(var1, var2);
+ }
+
+ public void writeText(final String par1Str) {
+ String var2 = "";
+ final String var3 = ChatAllowedCharacters.filterAllowedCharacters(par1Str);
+ final int var4 = (this.cursorPosition < this.selectionEnd) ? this.cursorPosition : this.selectionEnd;
+ final int var5 = (this.cursorPosition < this.selectionEnd) ? this.selectionEnd : this.cursorPosition;
+ final int var6 = this.maxStringLength - this.text.length() - (var4 - this.selectionEnd);
+ final boolean var7 = false;
+ if (this.text.length() > 0) {
+ var2 = String.valueOf(String.valueOf(var2)) + this.text.substring(0, var4);
+ }
+ int var8;
+ if (var6 < var3.length()) {
+ var2 = String.valueOf(String.valueOf(var2)) + var3.substring(0, var6);
+ var8 = var6;
+ }
+ else {
+ var2 = String.valueOf(String.valueOf(var2)) + var3;
+ var8 = var3.length();
+ }
+ if (this.text.length() > 0 && var5 < this.text.length()) {
+ var2 = String.valueOf(String.valueOf(var2)) + this.text.substring(var5);
+ }
+ this.text = var2.replaceAll(" ", "");
+ this.cursorPos(var4 - this.selectionEnd + var8);
+ }
+
+ public void func_73779_a(final int par1) {
+ if (this.text.length() != 0) {
+ if (this.selectionEnd != this.cursorPosition) {
+ this.writeText("");
+ }
+ else {
+ this.deleteFromCursor(this.getNthWordFromCursor(par1) - this.cursorPosition);
+ }
+ }
+ }
+
+ public void deleteFromCursor(final int par1) {
+ if (this.text.length() != 0) {
+ if (this.selectionEnd != this.cursorPosition) {
+ this.writeText("");
+ }
+ else {
+ final boolean var2 = par1 < 0;
+ final int var3 = var2 ? (this.cursorPosition + par1) : this.cursorPosition;
+ final int var4 = var2 ? this.cursorPosition : (this.cursorPosition + par1);
+ String var5 = "";
+ if (var3 >= 0) {
+ var5 = this.text.substring(0, var3);
+ }
+ if (var4 < this.text.length()) {
+ var5 = String.valueOf(String.valueOf(var5)) + this.text.substring(var4);
+ }
+ this.text = var5;
+ if (var2) {
+ this.cursorPos(par1);
+ }
+ }
+ }
+ }
+
+ public int getNthWordFromCursor(final int par1) {
+ return this.getNthWordFromPos(par1, this.getCursorPosition());
+ }
+
+ public int getNthWordFromPos(final int par1, final int par2) {
+ return this.type(par1, this.getCursorPosition(), true);
+ }
+
+ public int type(final int par1, final int par2, final boolean par3) {
+ int var4 = par2;
+ final boolean var5 = par1 < 0;
+ for (int var6 = Math.abs(par1), var7 = 0; var7 < var6; ++var7) {
+ if (!var5) {
+ final int var8 = this.text.length();
+ var4 = this.text.indexOf(32, var4);
+ if (var4 == -1) {
+ var4 = var8;
+ }
+ else {
+ while (par3) {
+ if (var4 >= var8) {
+ break;
+ }
+ if (this.text.charAt(var4) != ' ') {
+ break;
+ }
+ ++var4;
+ }
+ }
+ }
+ else {
+ while (par3) {
+ if (var4 <= 0) {
+ break;
+ }
+ if (this.text.charAt(var4 - 1) != ' ') {
+ break;
+ }
+ --var4;
+ }
+ while (var4 > 0 && this.text.charAt(var4 - 1) != ' ') {
+ --var4;
+ }
+ }
+ }
+ return var4;
+ }
+
+ public void cursorPos(final int par1) {
+ this.setCursorPosition(this.selectionEnd + par1);
+ }
+
+ public void setCursorPosition(final int par1) {
+ this.cursorPosition = par1;
+ final int var2 = this.text.length();
+ if (this.cursorPosition < 0) {
+ this.cursorPosition = 0;
+ }
+ if (this.cursorPosition > var2) {
+ this.cursorPosition = var2;
+ }
+ this.func_73800_i(this.cursorPosition);
+ }
+
+ public void setCursorPositionZero() {
+ this.setCursorPosition(0);
+ }
+
+ public void setCursorPositionEnd() {
+ this.setCursorPosition(this.text.length());
+ }
+
+ public boolean textboxKeyTyped(final char par1, final int par2) {
+ if (!this.isEnabled || !this.isFocused) {
+ return false;
+ }
+ switch (par1) {
+ case '\u0001': {
+ this.setCursorPositionEnd();
+ this.func_73800_i(0);
+ return true;
+ }
+ case '\u0003': {
+ GuiScreen.setClipboardString(this.getSelectedtext());
+ return true;
+ }
+ case '\u0016': {
+ this.writeText(GuiScreen.getClipboardString());
+ return true;
+ }
+ case '\u0018': {
+ GuiScreen.setClipboardString(this.getSelectedtext());
+ this.writeText("");
+ return true;
+ }
+ default: {
+ switch (par2) {
+ case 14: {
+ if (GuiScreen.isCtrlKeyDown()) {
+ this.func_73779_a(-1);
+ }
+ else {
+ this.deleteFromCursor(-1);
+ }
+ return true;
+ }
+ case 199: {
+ if (GuiScreen.isShiftKeyDown()) {
+ this.func_73800_i(0);
+ }
+ else {
+ this.setCursorPositionZero();
+ }
+ return true;
+ }
+ case 203: {
+ if (GuiScreen.isShiftKeyDown()) {
+ if (GuiScreen.isCtrlKeyDown()) {
+ this.func_73800_i(this.getNthWordFromPos(-1, this.getSelectionEnd()));
+ }
+ else {
+ this.func_73800_i(this.getSelectionEnd() - 1);
+ }
+ }
+ else if (GuiScreen.isCtrlKeyDown()) {
+ this.setCursorPosition(this.getNthWordFromCursor(-1));
+ }
+ else {
+ this.cursorPos(-1);
+ }
+ return true;
+ }
+ case 205: {
+ if (GuiScreen.isShiftKeyDown()) {
+ if (GuiScreen.isCtrlKeyDown()) {
+ this.func_73800_i(this.getNthWordFromPos(1, this.getSelectionEnd()));
+ }
+ else {
+ this.func_73800_i(this.getSelectionEnd() + 1);
+ }
+ }
+ else if (GuiScreen.isCtrlKeyDown()) {
+ this.setCursorPosition(this.getNthWordFromCursor(1));
+ }
+ else {
+ this.cursorPos(1);
+ }
+ return true;
+ }
+ case 207: {
+ if (GuiScreen.isShiftKeyDown()) {
+ this.func_73800_i(this.text.length());
+ }
+ else {
+ this.setCursorPositionEnd();
+ }
+ return true;
+ }
+ case 211: {
+ if (GuiScreen.isCtrlKeyDown()) {
+ this.func_73779_a(1);
+ }
+ else {
+ this.deleteFromCursor(1);
+ }
+ return true;
+ }
+ default: {
+ if (ChatAllowedCharacters.isAllowedCharacter(par1)) {
+ this.writeText(Character.toString(par1));
+ return true;
+ }
+ return false;
+ }
+ }
+ }
+ }
+ }
+
+ public void mouseClicked(final int par1, final int par2, final int par3) {
+ final boolean var4 = par1 >= this.xPos && par1 < this.xPos + this.width && par2 >= this.yPos && par2 < this.yPos + this.height;
+ if (this.canLoseFocus) {
+ this.setFocused(this.isEnabled && var4);
+ }
+ if (this.isFocused && par3 == 0) {
+ int var5 = par1 - this.xPos;
+ if (this.enableBackgroundDrawing) {
+ var5 -= 4;
+ }
+ final String var6 = this.fontRenderer.trimStringToWidth(this.text.substring(this.i), this.getWidth());
+ this.setCursorPosition(this.fontRenderer.trimStringToWidth(var6, var5).length() + this.i);
+ }
+ }
+
+ public void drawTextBox() {
+ if (this.func_73778_q()) {
+ if (this.getEnableBackgroundDrawing()) {
+ Gui.drawRect(this.xPos - 1, this.yPos - 1, this.xPos + this.width + 1, this.yPos + this.height + 1, -6250336);
+ Gui.drawRect(this.xPos, this.yPos, this.xPos + this.width, this.yPos + this.height, -16777216);
+ }
+ final int var1 = this.isEnabled ? this.enabledColor : this.disabledColor;
+ final int var2 = this.cursorPosition - this.i;
+ int var3 = this.selectionEnd - this.i;
+ final String var4 = this.fontRenderer.trimStringToWidth(this.text.substring(this.i), this.getWidth());
+ final boolean var5 = var2 >= 0 && var2 <= var4.length();
+ final boolean var6 = this.isFocused && this.cursorCounter / 6 % 2 == 0 && var5;
+ final int var7 = this.enableBackgroundDrawing ? (this.xPos + 4) : this.xPos;
+ final int var8 = this.enableBackgroundDrawing ? (this.yPos + (this.height - 8) / 2) : this.yPos;
+ int var9 = var7;
+ if (var3 > var4.length()) {
+ var3 = var4.length();
+ }
+ if (var4.length() > 0) {
+ if (var5) {
+ var4.substring(0, var2);
+ }
+ var9 = Minecraft.getMinecraft().fontRendererObj.drawStringWithShadow(this.text.replaceAll("(?s).", "*"), var7, var8, var1);
+ }
+ final boolean var10 = this.cursorPosition < this.text.length() || this.text.length() >= this.getMaxStringLength();
+ int var11 = var9;
+ if (!var5) {
+ var11 = ((var2 > 0) ? (var7 + this.width) : var7);
+ }
+ else if (var10) {
+ var11 = var9 - 1;
+ --var9;
+ }
+ if (var4.length() > 0 && var5 && var2 < var4.length()) {
+ Minecraft.getMinecraft().fontRendererObj.drawStringWithShadow(var4.substring(var2), var9, var8, var1);
+ }
+ if (var6) {
+ if (var10) {
+ Gui.drawRect(var11, var8 - 1, var11 + 1, var8 + 1 + this.fontRenderer.FONT_HEIGHT, -3092272);
+ }
+ else {
+ Minecraft.getMinecraft().fontRendererObj.drawStringWithShadow("_", var11, var8, var1);
+ }
+ }
+ if (var3 != var2) {
+ final int var12 = var7 + this.fontRenderer.getStringWidth(var4.substring(0, var3));
+ this.drawCursorVertical(var11, var8 - 1, var12 - 1, var8 + 1 + this.fontRenderer.FONT_HEIGHT);
+ }
+ }
+ }
+
+ private void drawCursorVertical(int par1, int par2, int par3, int par4) {
+ if (par1 < par3) {
+ final int var5 = par1;
+ par1 = par3;
+ par3 = var5;
+ }
+ if (par2 < par4) {
+ final int var5 = par2;
+ par2 = par4;
+ par4 = var5;
+ }
+ final Tessellator var6 = Tessellator.getInstance();
+ final WorldRenderer var7 = var6.getWorldRenderer();
+ GL11.glColor4f(0.0f, 0.0f, 255.0f, 255.0f);
+ GL11.glDisable(3553);
+ GL11.glEnable(3058);
+ GL11.glLogicOp(5387);
+ var7.begin(7, var7.getVertexFormat());
+ var7.pos(par1, par4, 0.0);
+ var7.pos(par3, par4, 0.0);
+ var7.pos(par3, par2, 0.0);
+ var7.pos(par1, par2, 0.0);
+ var7.finishDrawing();
+ GL11.glDisable(3058);
+ GL11.glEnable(3553);
+ }
+
+ public void setMaxStringLength(final int par1) {
+ this.maxStringLength = par1;
+ if (this.text.length() > par1) {
+ this.text = this.text.substring(0, par1);
+ }
+ }
+
+ public int getMaxStringLength() {
+ return this.maxStringLength;
+ }
+
+ public int getCursorPosition() {
+ return this.cursorPosition;
+ }
+
+ public boolean getEnableBackgroundDrawing() {
+ return this.enableBackgroundDrawing;
+ }
+
+ public void setEnableBackgroundDrawing(final boolean par1) {
+ this.enableBackgroundDrawing = par1;
+ }
+
+ public void func_73794_g(final int par1) {
+ this.enabledColor = par1;
+ }
+
+ public void setFocused(final boolean par1) {
+ if (par1 && !this.isFocused) {
+ this.cursorCounter = 0;
+ }
+ this.isFocused = par1;
+ }
+
+ public boolean isFocused() {
+ return this.isFocused;
+ }
+
+ public int getSelectionEnd() {
+ return this.selectionEnd;
+ }
+
+ public int getWidth() {
+ return this.getEnableBackgroundDrawing() ? (this.width - 8) : this.width;
+ }
+
+ public void func_73800_i(int par1) {
+ final int var2 = this.text.length();
+ if (par1 > var2) {
+ par1 = var2;
+ }
+ if (par1 < 0) {
+ par1 = 0;
+ }
+ this.selectionEnd = par1;
+ if (this.fontRenderer != null) {
+ if (this.i > var2) {
+ this.i = var2;
+ }
+ final int var3 = this.getWidth();
+ final String var4 = this.fontRenderer.trimStringToWidth(this.text.substring(this.i), var3);
+ final int var5 = var4.length() + this.i;
+ if (par1 == this.i) {
+ this.i -= this.fontRenderer.trimStringToWidth(this.text, var3, true).length();
+ }
+ if (par1 > var5) {
+ this.i += par1 - var5;
+ }
+ else if (par1 <= this.i) {
+ this.i -= this.i - par1;
+ }
+ if (this.i < 0) {
+ this.i = 0;
+ }
+ if (this.i > var2) {
+ this.i = var2;
+ }
+ }
+ }
+
+ public void setCanLoseFocus(final boolean par1) {
+ this.canLoseFocus = par1;
+ }
+
+ public boolean func_73778_q() {
+ return this.b;
+ }
+
+ public void func_73790_e(final boolean par1) {
+ this.b = par1;
+ }
+}
diff --git a/src/minecraft/animeware/ui/login/UserLoginThread.java b/src/minecraft/animeware/ui/login/UserLoginThread.java
new file mode 100644
index 0000000..7981797
--- /dev/null
+++ b/src/minecraft/animeware/ui/login/UserLoginThread.java
@@ -0,0 +1,63 @@
+package animeware.ui.login;
+
+import java.net.Proxy;
+
+import com.mojang.authlib.Agent;
+import com.mojang.authlib.exceptions.AuthenticationException;
+import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService;
+import com.mojang.authlib.yggdrasil.YggdrasilUserAuthentication;
+
+import animeware.NightSky;
+import animeware.gui.mainmenu.MainMenu;
+import animeware.login.User;
+import animeware.util.misc.Timer;
+import net.minecraft.client.Minecraft;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.Session;
+
+public final class UserLoginThread extends Thread {
+ private final String password;
+ private String status;
+ private final String username;
+ private Minecraft mc = Minecraft.getMinecraft();
+ private Timer timer = new Timer();
+
+ public UserLoginThread(String username, String password) {
+ super("Alt Login Thread");
+ this.username = username;
+ this.password = password;
+ this.status = (Object)((Object)EnumChatFormatting.GRAY) + "Waiting...";
+ }
+
+ private boolean User(String username, String password) {
+ for(User u : NightSky.INSTANCE.users.getUsers()) {
+ if(u.getName().equals(username) && u.getPassword().equals(password)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public String getStatus() {
+ return this.status;
+ }
+
+ @Override
+ public void run() {
+ if (User(this.username, this.password)) {
+ //this.mc.session = new Session(this.username, "", "", "mojang");
+ this.status = (Object)((Object)EnumChatFormatting.GREEN) + "Logged in! (" + this.username + ")";
+ mc.displayGuiScreen(new MainMenu());
+ return;
+ }
+ this.status = (Object)((Object)EnumChatFormatting.YELLOW) + "Logging in...";
+ if (!User(this.username, this.password)) {
+ this.status = (Object)((Object)EnumChatFormatting.RED) + "Login failed!";
+ }
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+}
+
diff --git a/src/minecraft/animeware/ui/themes/AstolfoButtons.java b/src/minecraft/animeware/ui/themes/AstolfoButtons.java
new file mode 100644
index 0000000..4d352ff
--- /dev/null
+++ b/src/minecraft/animeware/ui/themes/AstolfoButtons.java
@@ -0,0 +1,25 @@
+package animeware.ui.themes;
+
+import animeware.hud.mod.HudMod;
+import animeware.ui.themes.impl.ThemeManager;
+import net.minecraft.util.ResourceLocation;
+
+public class AstolfoButtons extends HudMod {
+
+ public AstolfoButtons() {
+ super("Astolfo Buttons", "", new ResourceLocation("Animeware/icons/blank.png"), 0, 0);
+ }
+ @Override
+ public void onEnable() {
+ ThemeManager.astolfoBtn = true;
+ //ClickGUI.setTheme(GUITheme.DARK);
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ ThemeManager.astolfoBtn = false;
+ //ClickGUI.setTheme(GUITheme.LIGHT);
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/ui/themes/GUIDark.java b/src/minecraft/animeware/ui/themes/GUIDark.java
new file mode 100644
index 0000000..0ab593a
--- /dev/null
+++ b/src/minecraft/animeware/ui/themes/GUIDark.java
@@ -0,0 +1,27 @@
+package animeware.ui.themes;
+
+import animeware.gui.clickgui.ClickGUI;
+import animeware.gui.clickgui.GUITheme;
+import animeware.ui.themes.impl.ThemeManager;
+import animeware.ui.themes.impl.ThemeMod;
+import net.minecraft.util.ResourceLocation;
+
+public class GUIDark extends ThemeMod {
+
+ public GUIDark() {
+ super("TNTTimer", "", new ResourceLocation("Animeware/icons/blank.png"), 0, 0);
+ }
+ @Override
+ public void onEnable() {
+ ThemeManager.guidark = true;
+ ClickGUI.setTheme(GUITheme.DARK);
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ ThemeManager.guidark = false;
+ ClickGUI.setTheme(GUITheme.LIGHT);
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/ui/themes/GUILight.java b/src/minecraft/animeware/ui/themes/GUILight.java
new file mode 100644
index 0000000..9536a93
--- /dev/null
+++ b/src/minecraft/animeware/ui/themes/GUILight.java
@@ -0,0 +1,28 @@
+package animeware.ui.themes;
+
+import animeware.gui.clickgui.ClickGUI;
+import animeware.gui.clickgui.GUITheme;
+import animeware.hud.mod.HudMod;
+import animeware.ui.themes.impl.ThemeManager;
+import animeware.ui.themes.impl.ThemeMod;
+import net.minecraft.util.ResourceLocation;
+
+public class GUILight extends HudMod {
+
+ public GUILight() {
+ super("Light theme", "", new ResourceLocation("Animeware/icons/blank.png"), 0, 0);
+ }
+ @Override
+ public void onEnable() {
+ ThemeManager.guilight = true;
+ //ClickGUI.setTheme(GUITheme.LIGHT);
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ ThemeManager.guilight = false;
+ //ClickGUI.setTheme(GUITheme.DARK);
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/ui/themes/color/ColorScheme.java b/src/minecraft/animeware/ui/themes/color/ColorScheme.java
new file mode 100644
index 0000000..c319ba8
--- /dev/null
+++ b/src/minecraft/animeware/ui/themes/color/ColorScheme.java
@@ -0,0 +1,29 @@
+package animeware.ui.themes.color;
+
+import animeware.hud.mod.HudMod;
+import animeware.ui.themes.impl.ThemeManager;
+import animeware.util.settings.ModeSetting;
+import net.minecraft.util.ResourceLocation;
+
+public class ColorScheme extends HudMod {
+
+ public ModeSetting color = new ModeSetting("Color", "White", "White", "Blue", "Cyan", "Red", "Purple", "Chroma");;
+
+ public ColorScheme() {
+ super("Color Scheme", "Right-click for settings", new ResourceLocation("Animeware/icons/blank.png"), 0, 0);
+ this.addSettings(color);
+ }
+ @Override
+ public void onEnable() {
+ //ThemeManager.guilight = true;
+ //ClickGUI.setTheme(GUITheme.LIGHT);
+ //super.onEnable();
+ }
+ @Override
+ public void onDisable() {
+ //ThemeManager.guilight = false;
+ //ClickGUI.setTheme(GUITheme.DARK);
+ //super.onDisable();
+ }
+
+}
diff --git a/src/minecraft/animeware/ui/themes/impl/ThemeButton.java b/src/minecraft/animeware/ui/themes/impl/ThemeButton.java
new file mode 100644
index 0000000..421478b
--- /dev/null
+++ b/src/minecraft/animeware/ui/themes/impl/ThemeButton.java
@@ -0,0 +1,94 @@
+package animeware.ui.themes.impl;
+
+import java.awt.Color;
+
+import animeware.util.font.FontUtil;
+import animeware.util.render.DrawUtil;
+import animeware.util.render.RoundedUtils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiScreen;
+
+public class ThemeButton {
+
+ public int x, y, w, h;
+ public ThemeMod m;
+ private boolean enabled;
+ boolean allowClick;
+ boolean allowDraw;
+
+ int width = GuiScreen.width;
+ int height = GuiScreen.height;
+
+ Minecraft mc = Minecraft.getMinecraft();
+
+ public ThemeButton(int x, int y, int w, int h, ThemeMod m) {
+ this.x = x;
+ this.y = y;
+ this.w = w;
+ this.h = h;
+ this.m = m;
+ this.enabled = false;
+
+ }
+
+ public void draw() {
+ Gui.drawRect(x, y, x + w, y + h, new Color(0, 0, 0, 0).getRGB());
+ //RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 90, y + h, 18.0F, new Color(40, 40, 45, 255).getRGB());
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w, y + h, 18.0F, new Color(50, 50, 55, 155).getRGB()); //70, 70, 75, 155
+ if(m.isEnabled()) {
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 190, y + h, 18.0F, new Color(0, 150, 200, 255).getRGB());
+ //DrawUtil.drawRoundedRect(x - 1, y - 5, x + w + 1, y + h + 1, 7 , new Color(200, 0, 0, 100).getRGB());
+ }else {
+ RoundedUtils.drawSmoothRoundedRect(x, y, x + w - 190, y + h, 18.0F, new Color(50, 50, 55, 255).getRGB());
+ //DrawUtil.drawRoundedRect(x - 1, y - 5, x + w + 1, y + h + 1, 7 , new Color(105, 105, 105, 100).getRGB());
+ }
+
+ //DrawUtil.drawRoundedRect(x, y - 4, x + w, y + h, 7 , new Color(205, 205, 205, 0).getRGB());
+ //DrawUtil.drawRoundedRect(x, y - 4, x + w, y + h, 7 , new Color(15, 15, 15, 255).getRGB());
+ FontUtil.normal.drawString(m.name, x + 45, y + 14, getColor());
+ FontUtil.normal.drawString(m.description, x + 45, y + 25, new Color(70, 70, 75, 255).getRGB());
+ if(!m.getIcon().getResourcePath().equals("")) {
+ DrawUtil.draw2DImage(m.getIcon(), x + 5, y + 5, 25, 25, Color.WHITE);
+ }
+ //GuiScreen.buttonList.add(new SettingsCGButton(2, 262, height / 3 - 10, ""));
+ //Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation ("Animeware/background/logo.png"));
+
+ }
+
+
+ private int getColor() {
+ if(m.isEnabled()) {
+ return new Color(155, 155, 155, 250).getRGB();
+ }else {
+ return new Color(155, 155, 155, 250).getRGB();
+ }
+
+ }
+
+ public void onClick(int mouseX, int mouseY, int Button) {
+ if(mouseX >= x && mouseX <= x + w && mouseY >= y && mouseY <= y +h) {
+ if(Button == 0) {
+ m.toggle();
+ System.out.println(this.getModNameToggle());
+ }
+
+ }
+
+ }
+ private String getModNameToggle() {
+ if(m.enabled) {
+ return m.name + ": enabled";
+ } else if(!m.enabled) {
+ return m.name + ": disabled";
+ }else {
+ return m.name;
+ }
+ }
+
+ private String getModName() {
+ return m.name;
+ }
+
+
+}
diff --git a/src/minecraft/animeware/ui/themes/impl/ThemeManager.java b/src/minecraft/animeware/ui/themes/impl/ThemeManager.java
new file mode 100644
index 0000000..1bb77f0
--- /dev/null
+++ b/src/minecraft/animeware/ui/themes/impl/ThemeManager.java
@@ -0,0 +1,30 @@
+package animeware.ui.themes.impl;
+
+import java.util.ArrayList;
+
+import animeware.ui.themes.GUIDark;
+import animeware.ui.themes.GUILight;
+
+public class ThemeManager {
+
+ public static boolean guidark;
+ public static boolean guilight;
+ public static boolean astolfoBtn;
+
+ public static ArrayList themes = new ArrayList<>();
+
+ public GUIDark guiDark;
+ public GUILight guiLight;
+
+ public ThemeManager() {
+ themes = new ArrayList<>();
+
+ themes.add(guiDark = new GUIDark());
+ //themes.add(guiLight = new GUILight());
+
+ }
+ public static ArrayList getThemes() {
+ return themes;
+ }
+
+}
diff --git a/src/minecraft/animeware/ui/themes/impl/ThemeMod.java b/src/minecraft/animeware/ui/themes/impl/ThemeMod.java
new file mode 100644
index 0000000..747cde7
--- /dev/null
+++ b/src/minecraft/animeware/ui/themes/impl/ThemeMod.java
@@ -0,0 +1,167 @@
+package animeware.ui.themes.impl;
+
+import java.awt.Color;
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import animeware.NightSky;
+import animeware.event.EventManager;
+import animeware.hud.DraggableComponent;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiLabel;
+import net.minecraft.util.ResourceLocation;
+
+public class ThemeMod {
+
+ public Minecraft mc = Minecraft.getMinecraft();
+ public FontRenderer fr = mc.fontRendererObj;
+ protected List buttonList = Lists.newArrayList();
+ protected List labelList = Lists.newArrayList();
+
+ //public List settings = new ArrayList();
+
+ public static boolean expanded;
+ public int lenght = 10;
+ public String name;
+ public String description;
+ public ResourceLocation icon;
+ //public boolean isEnabled = false;
+ public boolean enabled;
+ public DraggableComponent drag;
+
+ public int index;
+
+ public int x, y, w, h;
+
+ public ThemeMod(String name, String description, ResourceLocation icon, int x, int y) {
+ this.name = name;
+ this.description = description;
+ this.icon = icon;
+
+ try {
+ this.x = ((Integer)NightSky.INSTANCE.config.config.get(String.valueOf(name.toLowerCase()) + " x")).intValue();
+ this.y = ((Integer)NightSky.INSTANCE.config.config.get(String.valueOf(name.toLowerCase()) + " y")).intValue();
+ setEnabled(((Boolean)NightSky.INSTANCE.config.config.get(String.valueOf(name.toLowerCase()) + " enabled")).booleanValue());
+ } catch (NullPointerException e) {
+ //e.printStackTrace();
+ System.out.println("Conlig Load Failed - ThemeMod");
+ this.x = x;
+ this.y = y;
+ this.enabled = false;
+ }
+
+ drag = new DraggableComponent(this.x, this.y, getWidth(), getHeight(), new Color(0, 0, 0, 0).getRGB());
+ }
+
+
+ public int getWidth() {
+
+ return 50;
+
+ }
+
+ public int getHeight() {
+ return 50;
+
+ }
+ public ResourceLocation getIcon() {
+ return icon;
+ }
+
+ public void draw() {
+
+ }
+
+ public void renderDummy(int mouseX, int mouseY) {
+ drag.draw(mouseX, mouseY);
+
+ }
+
+ public int getX() {
+ return drag.getxPosition();
+ }
+
+ public int getY() {
+ return drag.getyPosition();
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ if(enabled) {
+ onEnable();
+ }
+ else {
+ onDisable();
+ }
+ }
+ public void setDisabled(boolean enabled) {
+ this.enabled = !enabled;
+ if(!enabled) {
+ onDisable();
+ }
+ else {
+ onEnable();
+ }
+ }
+
+ public void onEnable() {EventManager.register(this);}
+
+ public void toggle() {
+ this.setEnabled(!enabled);
+
+ }
+ public void expand() {
+ if(expanded) {
+ expanded = false;
+ } else {
+ expanded = true;
+ }
+
+ }
+
+
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+ public boolean isDisabled() {
+ return !enabled;
+ }
+
+
+ public void onDisable() {
+ NightSky.INSTANCE.eventManager.unregister(this);
+
+ }
+ public void drawScreen(int mouseX, int mouseY, float partialTicks)
+ {
+ for (int i = 0; i < this.buttonList.size(); ++i)
+ {
+ ((GuiButton)this.buttonList.get(i)).drawButton(this.mc, mouseX, mouseY);
+ }
+
+ for (int j = 0; j < this.labelList.size(); ++j)
+ {
+ ((GuiLabel)this.labelList.get(j)).drawLabel(this.mc, mouseX, mouseY);
+ }
+ }
+ //@Override
+ public String getToggled() {
+ return "Toggled";
+ }
+ public void Notif() {
+
+ }
+
+
+}
+
+
+
+
+
+
+
diff --git a/src/minecraft/animeware/util/ChromaString.java b/src/minecraft/animeware/util/ChromaString.java
new file mode 100644
index 0000000..0913639
--- /dev/null
+++ b/src/minecraft/animeware/util/ChromaString.java
@@ -0,0 +1,22 @@
+/* */ package animeware.util;
+/* */
+/* */ import java.awt.Color;
+/* */ import net.minecraft.client.Minecraft;
+/* */
+/* */
+/* */ public class ChromaString
+/* */ {
+/* */ public static void drawChromaString(String string, int x, int y, int k) {
+/* 10 */ Minecraft mc = Minecraft.getMinecraft();
+/* */
+/* 12 */ int xTmp = x; byte b; int i; char[] arrayOfChar;
+/* 13 */ for (i = (arrayOfChar = string.toCharArray()).length, b = 0; b < i; ) { char textChar = arrayOfChar[b];
+/* 14 */ long l = System.currentTimeMillis() - (xTmp * 10 - y * 10);
+/* 15 */ int j = Color.HSBtoRGB((float)(l % 2000L) / 2000.0F, 0.8F, 0.8F);
+/* 16 */ String tmp = String.valueOf(textChar);
+/* 17 */ mc.fontRendererObj.drawString(tmp, xTmp, y, j);
+/* 18 */ xTmp += mc.fontRendererObj.getCharWidth(textChar);
+/* */ b++; }
+/* */
+/* */ }
+/* */ }
diff --git a/src/minecraft/animeware/util/ClientPanorama.java b/src/minecraft/animeware/util/ClientPanorama.java
new file mode 100644
index 0000000..64c78ad
--- /dev/null
+++ b/src/minecraft/animeware/util/ClientPanorama.java
@@ -0,0 +1,54 @@
+package animeware.util;
+
+import net.minecraft.util.ResourceLocation;
+
+import java.util.Calendar;
+import java.util.Date;
+
+public class ClientPanorama {
+
+ private static final ResourceLocation BACKGROUND_NORMAL = new ResourceLocation("Animeware/panorama/normal/background.png");
+ private static final ResourceLocation BACKGROUND_CHRISTMAS = new ResourceLocation("Animeware/panorama/christmas/background.png");
+
+ private static final ResourceLocation[] TILES_NORMAL = new ResourceLocation[] {
+ new ResourceLocation("Animeware/panorama/normal/panorama_0.png"),
+ new ResourceLocation("Animeware/panorama/normal/panorama_1.png"),
+ new ResourceLocation("Animeware/panorama/normal/panorama_2.png"),
+ new ResourceLocation("Animeware/panorama/normal/panorama_3.png"),
+ new ResourceLocation("Animeware/panorama/normal/panorama_4.png"),
+ new ResourceLocation("Animeware/panorama/normal/panorama_5.png")
+ };
+ private static final ResourceLocation[] TILES_CHRISTMAS = new ResourceLocation[] {
+ new ResourceLocation("Animeware/panorama/christmas/panorama_0.png"),
+ new ResourceLocation("Animeware/panorama/christmas/panorama_1.png"),
+ new ResourceLocation("Animeware/panorama/christmas/panorama_2.png"),
+ new ResourceLocation("Animeware/panorama/christmas/panorama_3.png"),
+ new ResourceLocation("Animeware/panorama/christmas/panorama_4.png"),
+ new ResourceLocation("Animeware/panorama/christmas/panorama_5.png")
+ };
+
+ public static ResourceLocation[] getTiles() {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(new Date());
+
+ if(isChristmas(calendar))
+ return TILES_CHRISTMAS;
+
+ return TILES_NORMAL;
+ }
+
+ public static ResourceLocation getBackground() {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(new Date());
+
+ if(isChristmas(calendar))
+ return BACKGROUND_CHRISTMAS;
+
+ return BACKGROUND_NORMAL;
+ }
+
+ private static boolean isChristmas(Calendar calendar) {
+ return calendar.get(2) + 1 == 12;
+ }
+
+}
diff --git a/src/minecraft/animeware/util/DatabaseUtil.java b/src/minecraft/animeware/util/DatabaseUtil.java
new file mode 100644
index 0000000..8df9b81
--- /dev/null
+++ b/src/minecraft/animeware/util/DatabaseUtil.java
@@ -0,0 +1,78 @@
+//
+// Decompiled by Procyon v0.5.36
+//
+
+package animeware.util;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Scanner;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
+public class DatabaseUtil
+{
+ private static String stringurl;
+ private static JsonArray data;
+
+ static {
+ DatabaseUtil.stringurl = "https://raw.githubusercontent.com/cornly/coscoremod/main/cos.json";
+ }
+
+ public static void parseData() {
+ URL url = null;
+ try {
+ url = new URL(DatabaseUtil.stringurl);
+ final Scanner scanner = new Scanner(url.openStream(), "UTF-8").useDelimiter("\\A");
+ final String result = scanner.next();
+ final JsonParser parser = new JsonParser();
+ DatabaseUtil.data = parser.parse(result).getAsJsonArray();
+ scanner.close();
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static boolean getBoolean(final String playerUUID, final String key) throws IOException {
+ for (int i = 0; i < DatabaseUtil.data.size(); ++i) {
+ final JsonObject jsonObject = DatabaseUtil.data.get(i).getAsJsonObject();
+ if (jsonObject.get("uuid").getAsString().equals(playerUUID) && jsonObject.get(key).getAsBoolean()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static double getDouble(final String playerUUID, final String key) throws IOException {
+ for (int i = 0; i < DatabaseUtil.data.size(); ++i) {
+ final JsonObject jsonObject = DatabaseUtil.data.get(i).getAsJsonObject();
+ if (jsonObject.get("uuid").getAsString().equals(playerUUID)) {
+ return jsonObject.get(key).getAsDouble();
+ }
+ }
+ return (Double) null;
+ }
+
+ public static String getString(final String playerUUID, final String key) throws IOException {
+ for (int i = 0; i < DatabaseUtil.data.size(); ++i) {
+ final JsonObject jsonObject = DatabaseUtil.data.get(i).getAsJsonObject();
+ if (jsonObject.get("uuid").getAsString().equals(playerUUID)) {
+ return jsonObject.get(key).getAsString();
+ }
+ }
+ return null;
+ }
+
+ public static Integer getInt(final String playerUUID, final String key) throws IOException {
+ for (int i = 0; i < DatabaseUtil.data.size(); ++i) {
+ final JsonObject jsonObject = DatabaseUtil.data.get(i).getAsJsonObject();
+ if (jsonObject.get("uuid").getAsString().equals(playerUUID)) {
+ return jsonObject.get(key).getAsInt();
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/minecraft/animeware/util/FakeUtils/FakeChunkProvider.java b/src/minecraft/animeware/util/FakeUtils/FakeChunkProvider.java
new file mode 100644
index 0000000..f17c0e2
--- /dev/null
+++ b/src/minecraft/animeware/util/FakeUtils/FakeChunkProvider.java
@@ -0,0 +1,87 @@
+package animeware.util.FakeUtils;
+
+
+
+import java.util.List;
+
+import net.minecraft.entity.EnumCreatureType;
+import net.minecraft.util.BlockPos;
+import net.minecraft.util.IProgressUpdate;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeGenBase.SpawnListEntry;
+import net.minecraft.world.chunk.Chunk;
+import net.minecraft.world.chunk.IChunkProvider;
+
+public class FakeChunkProvider implements IChunkProvider {
+
+ @Override
+ public boolean chunkExists(int x, int z) {
+ return false;
+ }
+
+ @Override
+ public Chunk provideChunk(int x, int z) {
+ return null;
+ }
+
+ @Override
+ public Chunk provideChunk(BlockPos blockPosIn) {
+ return null;
+ }
+
+ @Override
+ public void populate(IChunkProvider p_73153_1_, int p_73153_2_, int p_73153_3_) {
+
+ }
+
+ @Override
+ public boolean func_177460_a(IChunkProvider p_177460_1_, Chunk p_177460_2_, int p_177460_3_, int p_177460_4_) {
+ return false;
+ }
+
+ @Override
+ public boolean saveChunks(boolean p_73151_1_, IProgressUpdate progressCallback) {
+ return false;
+ }
+
+ @Override
+ public boolean unloadQueuedChunks() {
+ return false;
+ }
+
+ @Override
+ public boolean canSave() {
+ return false;
+ }
+
+ @Override
+ public String makeString() {
+ return null;
+ }
+
+ @Override
+ public List getPossibleCreatures(EnumCreatureType creatureType, BlockPos pos) {
+ return null;
+ }
+
+ @Override
+ public BlockPos getStrongholdGen(World worldIn, String structureName, BlockPos position) {
+ return null;
+ }
+
+ @Override
+ public int getLoadedChunkCount() {
+ return 0;
+ }
+
+ @Override
+ public void recreateStructures(Chunk p_180514_1_, int p_180514_2_, int p_180514_3_) {
+
+ }
+
+ @Override
+ public void saveExtraData() {
+
+ }
+
+}
diff --git a/src/minecraft/animeware/util/FakeUtils/FakeNetworkManager.java b/src/minecraft/animeware/util/FakeUtils/FakeNetworkManager.java
new file mode 100644
index 0000000..3a8879d
--- /dev/null
+++ b/src/minecraft/animeware/util/FakeUtils/FakeNetworkManager.java
@@ -0,0 +1,15 @@
+package animeware.util.FakeUtils;
+
+
+import net.minecraft.network.EnumPacketDirection;
+import net.minecraft.network.NetworkManager;
+
+public class FakeNetworkManager extends NetworkManager {
+
+ //Not sure if I need to override anything in here. It seems to work fine without overriding packets being sent
+
+ public FakeNetworkManager(EnumPacketDirection packetDirection) {
+ super(packetDirection);
+ }
+
+}
diff --git a/src/minecraft/animeware/util/FakeUtils/FakeNetworkPlayerInfo.java b/src/minecraft/animeware/util/FakeUtils/FakeNetworkPlayerInfo.java
new file mode 100644
index 0000000..df69e0a
--- /dev/null
+++ b/src/minecraft/animeware/util/FakeUtils/FakeNetworkPlayerInfo.java
@@ -0,0 +1,43 @@
+package animeware.util.FakeUtils;
+
+import com.mojang.authlib.GameProfile;
+
+import net.minecraft.client.network.NetworkPlayerInfo;
+import net.minecraft.scoreboard.ScorePlayerTeam;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.IChatComponent;
+import net.minecraft.world.WorldSettings.GameType;
+
+public class FakeNetworkPlayerInfo extends NetworkPlayerInfo {
+
+ public FakeNetworkPlayerInfo(GameProfile gp) {
+ super(gp);
+ }
+
+ @Override
+ public IChatComponent getDisplayName() {
+ return new ChatComponentText(getGameProfile().getName());
+ }
+
+ @Override
+ public GameType getGameType() {
+ return GameType.CREATIVE;
+ }
+
+ @Override
+ public int getResponseTime() {
+ return 0;
+ }
+
+ //slim, default
+ @Override
+ public String getSkinType() {
+ return "default";
+ }
+
+ @Override
+ public ScorePlayerTeam getPlayerTeam() {
+ return null;
+ }
+
+}
diff --git a/src/minecraft/animeware/util/FakeUtils/FakePlayer.java b/src/minecraft/animeware/util/FakeUtils/FakePlayer.java
new file mode 100644
index 0000000..3ab5f3c
--- /dev/null
+++ b/src/minecraft/animeware/util/FakeUtils/FakePlayer.java
@@ -0,0 +1,72 @@
+package animeware.util.FakeUtils;
+
+import java.util.UUID;
+
+import com.mojang.authlib.GameProfile;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.EntityPlayerSP;
+import net.minecraft.client.network.NetHandlerPlayClient;
+import net.minecraft.client.network.NetworkPlayerInfo;
+import net.minecraft.entity.player.EnumPlayerModelParts;
+import net.minecraft.network.EnumPacketDirection;
+import net.minecraft.util.MovementInput;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.world.World;
+
+public class FakePlayer extends EntityPlayerSP {
+
+ public FakePlayer(Minecraft mc, World world) {
+ this(mc, world, checkNullGameProfile());
+ }
+
+ public FakePlayer(Minecraft mc, World world, GameProfile gp) {
+ super(mc, world, new NetHandlerPlayClient(mc, mc.currentScreen, new FakeNetworkManager(EnumPacketDirection.CLIENTBOUND), gp) {
+ @Override
+ public NetworkPlayerInfo getPlayerInfo(String p_175104_1_) {
+ return new FakeNetworkPlayerInfo(gp);
+ }
+ @Override
+ public NetworkPlayerInfo getPlayerInfo(UUID p_175102_1_) {
+ return new FakeNetworkPlayerInfo(gp);
+ }
+ }, null);
+
+ this.dimension = 0;
+ this.movementInput = new MovementInput();
+ this.posX = 0;
+ this.posY = 0;
+ this.posZ = 0;
+ }
+
+ @Override
+ public float getEyeHeight() {
+ return 1.82F;
+ }
+
+ @Override
+ public boolean isWearing(EnumPlayerModelParts p_175148_1_) {
+ return true;
+ }
+
+ //getPlayerInfo() is aparently not called in hasPlayerInfo? Not super sure why
+ @Override
+ public boolean hasPlayerInfo() {
+ return true;
+ }
+
+ //might not be nessessary, not sure as of now
+ @Override
+ protected NetworkPlayerInfo getPlayerInfo() {
+ return new FakeNetworkPlayerInfo(getGameProfile());
+ }
+
+ //Some people were experiencing a null GameProfile for their session
+ //Not sure why, but his is a fix for it
+ private static GameProfile checkNullGameProfile() {
+ if(Minecraft.getMinecraft().getSession() == null || Minecraft.getMinecraft().getSession().getProfile() == null) {
+ return new GameProfile(UUID.randomUUID(), "FakePlayer");
+ }
+ return Minecraft.getMinecraft().getSession().getProfile();
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/util/FakeUtils/FakeSaveHandler.java b/src/minecraft/animeware/util/FakeUtils/FakeSaveHandler.java
new file mode 100644
index 0000000..315c784
--- /dev/null
+++ b/src/minecraft/animeware/util/FakeUtils/FakeSaveHandler.java
@@ -0,0 +1,67 @@
+package animeware.util.FakeUtils;
+
+
+
+import java.io.File;
+
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.world.MinecraftException;
+import net.minecraft.world.WorldProvider;
+import net.minecraft.world.chunk.storage.IChunkLoader;
+import net.minecraft.world.storage.IPlayerFileData;
+import net.minecraft.world.storage.ISaveHandler;
+import net.minecraft.world.storage.WorldInfo;
+
+public class FakeSaveHandler implements ISaveHandler {
+
+ @Override
+ public WorldInfo loadWorldInfo() {
+ return null;
+ }
+
+ @Override
+ public void checkSessionLock() throws MinecraftException {
+
+ }
+
+ @Override
+ public IChunkLoader getChunkLoader(WorldProvider provider) {
+ return null;
+ }
+
+ @Override
+ public void saveWorldInfoWithPlayer(WorldInfo worldInformation, NBTTagCompound tagCompound) {
+
+ }
+
+ @Override
+ public void saveWorldInfo(WorldInfo worldInformation) {
+
+ }
+
+ @Override
+ public IPlayerFileData getPlayerNBTManager() {
+ return null;
+ }
+
+ @Override
+ public void flush() {
+
+ }
+
+ @Override
+ public File getWorldDirectory() {
+ return null;
+ }
+
+ @Override
+ public File getMapFileFromName(String mapName) {
+ return null;
+ }
+
+ @Override
+ public String getWorldDirectoryName() {
+ return "";
+ }
+
+}
diff --git a/src/minecraft/animeware/util/FakeUtils/FakeWorld.java b/src/minecraft/animeware/util/FakeUtils/FakeWorld.java
new file mode 100644
index 0000000..0924249
--- /dev/null
+++ b/src/minecraft/animeware/util/FakeUtils/FakeWorld.java
@@ -0,0 +1,658 @@
+package animeware.util.FakeUtils;
+
+
+
+import java.util.List;
+
+import com.google.common.base.Predicate;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.block.state.IBlockState;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EnumCreatureType;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.profiler.Profiler;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.BlockPos;
+import net.minecraft.util.EnumFacing;
+import net.minecraft.util.EnumParticleTypes;
+import net.minecraft.util.MovingObjectPosition;
+import net.minecraft.util.Vec3;
+import net.minecraft.world.EnumSkyBlock;
+import net.minecraft.world.MinecraftException;
+import net.minecraft.world.World;
+import net.minecraft.world.WorldProvider;
+import net.minecraft.world.WorldSavedData;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraft.world.biome.BiomeGenPlains;
+import net.minecraft.world.border.WorldBorder;
+import net.minecraft.world.chunk.Chunk;
+import net.minecraft.world.chunk.IChunkProvider;
+import net.minecraft.world.storage.ISaveHandler;
+import net.minecraft.world.storage.WorldInfo;
+
+public class FakeWorld extends World {
+
+ public FakeWorld(WorldInfo info) {
+ super(new FakeSaveHandler(), info, new FakeWorldProvider(), new Profiler(), true);
+ this.provider.registerWorld(this);
+ }
+
+ @Override
+ protected IChunkProvider createChunkProvider() {
+ return new FakeChunkProvider();
+ }
+
+ @Override
+ protected int getRenderDistanceChunks() {
+ return 0;
+ }
+
+ @Override
+ public BiomeGenBase getBiomeGenForCoords(BlockPos pos) {
+ return BiomeGenBase.plains;
+ }
+
+ @Override
+ protected boolean isChunkLoaded(int x, int z, boolean allowEmpty) {
+ return false;
+ }
+
+ @Override
+ public BlockPos getTopSolidOrLiquidBlock(BlockPos pos) {
+ return new BlockPos(pos.getX(), 63, pos.getZ());
+ }
+
+ @Override
+ public boolean isAirBlock(BlockPos pos) {
+ return pos.getY() > 63;
+ }
+
+ @Override
+ public IBlockState getBlockState(BlockPos pos) {
+ return pos.getY() > 63 ? Blocks.air.getDefaultState() : Blocks.grass.getDefaultState();
+ }
+
+ @Override
+ public boolean setBlockState(BlockPos pos, IBlockState newState, int flags) {
+ return true;
+ }
+
+ @Override
+ public boolean setBlockState(BlockPos pos, IBlockState state) {
+ return true;
+ }
+
+ @Override
+ public boolean setBlockToAir(BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public void markChunkDirty(BlockPos pos, TileEntity unusedTileEntity) {
+
+ }
+
+ @Override
+ public void notifyNeighborsOfStateChange(BlockPos pos, Block blockType) {
+
+ }
+
+ @Override
+ public boolean destroyBlock(BlockPos pos, boolean dropBlock) {
+ return this.isAirBlock(pos);
+ }
+
+ @Override
+ public void notifyBlockOfStateChange(BlockPos pos, Block blockIn) {
+
+ }
+
+ @Override
+ public void notifyNeighborsOfStateExcept(BlockPos pos, Block blockType, EnumFacing skipSide) {
+
+ }
+
+ @Override
+ public void markBlockForUpdate(BlockPos pos) {
+
+ }
+
+ @Override
+ public void notifyLightSet(BlockPos pos) {
+
+ }
+
+ @Override
+ public void notifyNeighborsRespectDebug(BlockPos pos, Block blockType) {
+
+ }
+
+ @Override
+ public void markBlockRangeForRenderUpdate(BlockPos rangeMin, BlockPos rangeMax) {
+
+ }
+
+ @Override
+ public void markBlockRangeForRenderUpdate(int x1, int y1, int z1, int x2, int y2, int z2) {
+
+ }
+
+ @Override
+ public void markBlocksDirtyVertical(int x1, int z1, int x2, int z2) {
+
+ }
+
+ @Override
+ public void markTileEntityForRemoval(TileEntity tileEntityIn) {
+
+ }
+
+ @Override
+ public boolean isBlockTickPending(BlockPos pos, Block blockType) {
+ return false;
+ }
+
+ @Override
+ public int getLight(BlockPos pos) {
+ return 14;
+ }
+
+ @Override
+ public int getLight(BlockPos pos, boolean checkNeighbors) {
+ return 14;
+ }
+
+ @Override
+ public int getLightFor(EnumSkyBlock type, BlockPos pos) {
+ return 14;
+ }
+
+ @Override
+ public int getLightFromNeighbors(BlockPos pos) {
+ return 14;
+ }
+
+ @Override
+ public int getLightFromNeighborsFor(EnumSkyBlock type, BlockPos pos) {
+ return 14;
+ }
+
+ @Override
+ public boolean canBlockSeeSky(BlockPos pos) {
+ return pos.getY() > 62;
+ }
+
+ @Override
+ public BlockPos getHeight(BlockPos pos) {
+ return new BlockPos(pos.getX(), 63, pos.getZ());
+ }
+
+ @Override
+ public int getChunksLowestHorizon(int x, int z) {
+ return 63;
+ }
+
+ @Override
+ protected void updateBlocks() {
+
+ }
+
+ @Override
+ public void setLightFor(EnumSkyBlock type, BlockPos pos, int lightValue) {
+
+ }
+
+ @Override
+ public float getLightBrightness(BlockPos pos) {
+ return 1f;
+ }
+
+ @Override
+ public float getSunBrightness(float p_72971_1_) {
+ return 1f;
+ }
+
+ @Override
+ public boolean isDaytime() {
+ return true;
+ }
+
+ @Override
+ public void playSound(double x, double y, double z, String soundName, float volume, float pitch, boolean distanceDelay) {
+
+ }
+
+ @Override
+ public void playSoundAtEntity(Entity entityIn, String name, float volume, float pitch) {
+
+ }
+
+ @Override
+ public void playSoundEffect(double x, double y, double z, String soundName, float volume, float pitch) {
+
+ }
+
+ @Override
+ public void playSoundToNearExcept(EntityPlayer player, String name, float volume, float pitch) {
+
+ }
+
+ @Override
+ public void spawnParticle(EnumParticleTypes particleType, boolean p_175682_2_, double xCoord, double yCoord, double zCoord, double xOffset, double yOffset, double zOffset, int... p_175682_15_) {
+
+ }
+
+ @Override
+ public void spawnParticle(EnumParticleTypes particleType, double xCoord, double yCoord, double zCoord, double xOffset, double yOffset, double zOffset, int... p_175688_14_) {
+
+ }
+
+ @Override
+ public void playRecord(BlockPos pos, String name) {
+
+ }
+
+ @Override
+ public MovingObjectPosition rayTraceBlocks(Vec3 p_72933_1_, Vec3 p_72933_2_) {
+ return null;
+ }
+
+ @Override
+ public MovingObjectPosition rayTraceBlocks(Vec3 start, Vec3 end, boolean stopOnLiquid) {
+ return null;
+ }
+
+ @Override
+ public MovingObjectPosition rayTraceBlocks(Vec3 vec31, Vec3 vec32, boolean stopOnLiquid, boolean ignoreBlockWithoutBoundingBox, boolean returnLastUncollidableBlock) {
+ return null;
+ }
+
+ @Override
+ public boolean addWeatherEffect(Entity entityIn) {
+ return false;
+ }
+
+ @Override
+ public boolean spawnEntityInWorld(Entity entityIn) {
+ return false;
+ }
+
+ @Override
+ protected void onEntityAdded(Entity entityIn) {
+
+ }
+
+ @Override
+ protected void onEntityRemoved(Entity entityIn) {
+
+ }
+
+ @Override
+ public void removeEntity(Entity entityIn) {
+
+ }
+
+ @Override
+ public void removePlayerEntityDangerously(Entity entityIn) {
+
+ }
+
+ @Override
+ public int calculateSkylightSubtracted(float p_72967_1_) {
+ return 6;
+ }
+
+ @Override
+ public void scheduleBlockUpdate(BlockPos pos, Block blockIn, int delay, int priority) {
+
+ }
+
+ @Override
+ public void updateEntities() {
+
+ }
+
+ @Override
+ public void updateEntityWithOptionalForce(Entity entityIn, boolean forceUpdate) {
+ if (forceUpdate) {
+ ++entityIn.ticksExisted;
+ }
+ }
+
+ @Override
+ public boolean checkNoEntityCollision(AxisAlignedBB bb) {
+ return true;
+ }
+
+ @Override
+ public boolean checkNoEntityCollision(AxisAlignedBB bb, Entity entityIn) {
+ return true;
+ }
+
+ @Override
+ public boolean checkBlockCollision(AxisAlignedBB bb) {
+ return false;
+ }
+
+ @Override
+ public boolean isAnyLiquid(AxisAlignedBB bb) {
+ return false;
+ }
+
+ @Override
+ public boolean handleMaterialAcceleration(AxisAlignedBB par1AxisAlignedBB, Material par2Material, Entity par3Entity) {
+ return false;
+ }
+
+ @Override
+ public boolean isMaterialInBB(AxisAlignedBB par1AxisAlignedBB, Material par2Material) {
+ return false;
+ }
+
+ @Override
+ public boolean isAABBInMaterial(AxisAlignedBB par1AxisAlignedBB, Material par2Material) {
+ return false;
+ }
+
+ @Override
+ public TileEntity getTileEntity(BlockPos pos) {
+ return null;
+ }
+
+ @Override
+ public boolean extinguishFire(EntityPlayer player, BlockPos pos, EnumFacing side) {
+ return true;
+ }
+
+ @Override
+ public String getDebugLoadedEntities() {
+ return "";
+ }
+
+ @Override
+ public String getProviderName() {
+ return "";
+ }
+
+ @Override
+ public void setTileEntity(BlockPos pos, TileEntity tileEntityIn) {
+
+ }
+
+ @Override
+ public void removeTileEntity(BlockPos pos) {
+
+ }
+
+ @Override
+ public boolean isBlockNormalCube(BlockPos pos, boolean _default) {
+ return true;
+ }
+
+ @Override
+ public void tick() {
+
+ }
+
+ @Override
+ protected void updateWeather() {
+
+ }
+
+ @Override
+ public boolean canBlockFreezeWater(BlockPos pos) {
+ return false;
+ }
+
+ @Override
+ public boolean canBlockFreezeNoWater(BlockPos pos) {
+ return false;
+ }
+
+ @Override
+ public boolean canBlockFreeze(BlockPos pos, boolean noWaterAdj) {
+ return false;
+ }
+
+ @Override
+ public boolean canSnowAt(BlockPos pos, boolean checkLight) {
+ return false;
+ }
+
+ @Override
+ public boolean tickUpdates(boolean par1) {
+ return false;
+ }
+
+ @Override
+ public List getPendingBlockUpdates(Chunk par1Chunk, boolean par2) {
+ return null;
+ }
+
+ @Override
+ public Entity findNearestEntityWithinAABB(Class par1Class, AxisAlignedBB par2AxisAlignedBB, Entity par3Entity) {
+ return null;
+ }
+
+ @Override
+ public void loadEntities(Collection entityCollection) {
+
+ }
+
+ @Override
+ public void unloadEntities(Collection entityCollection) {
+
+ }
+
+ @Override
+ public int countEntities(Class par1Class) {
+ return 0;
+ }
+
+ @Override
+ public int getStrongPower(BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public int getStrongPower(BlockPos pos, EnumFacing direction) {
+ return 0;
+ }
+
+ @Override
+ public boolean isSidePowered(BlockPos pos, EnumFacing side) {
+ return false;
+ }
+
+ @Override
+ public int getRedstonePower(BlockPos pos, EnumFacing facing) {
+ return 0;
+ }
+
+ @Override
+ public boolean isBlockPowered(BlockPos pos) {
+ return false;
+ }
+
+ @Override
+ public int isBlockIndirectlyGettingPowered(BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public void checkSessionLock() throws MinecraftException {
+ }
+
+ @Override
+ public long getSeed() {
+ return 1;
+ }
+
+ @Override
+ public long getTotalWorldTime() {
+ return 1;
+ }
+
+ @Override
+ public long getWorldTime() {
+ return 1;
+ }
+
+ @Override
+ public void setWorldTime(long par1) {
+ }
+
+ @Override
+ public BlockPos getSpawnPoint() {
+ return new BlockPos(0, 64, 0);
+ }
+
+ @Override
+ public void joinEntityInSurroundings(Entity par1Entity) {
+ }
+
+ @Override
+ public boolean canSeeSky(BlockPos pos) {
+ return pos.getY() > 62;
+ }
+
+ @Override
+ public void setEntityState(Entity par1Entity, byte par2) {
+ }
+
+ @Override
+ public float getThunderStrength(float delta) {
+ return 0.0F;
+ }
+
+ @Override
+ public void addBlockEvent(BlockPos pos, Block blockIn, int eventID, int eventParam) {
+ }
+
+ @Override
+ public void updateAllPlayersSleepingFlag() {
+ }
+
+ @Override
+ public void setThunderStrength(float p_147442_1_) {
+ }
+
+ @Override
+ public float getRainStrength(float par1) {
+ return 0.0F;
+ }
+
+ @Override
+ public void setRainStrength(float par1) {
+ }
+
+ @Override
+ public boolean isThundering() {
+ return false;
+ }
+
+ @Override
+ public boolean isRaining() {
+ return false;
+ }
+
+ @Override
+ public boolean isBlockinHighHumidity(BlockPos pos) {
+ return false;
+ }
+
+ @Override
+ public void setItemData(String par1Str, WorldSavedData par2WorldSavedData) {
+ }
+
+ @Override
+ public void playBroadcastSound(int p_175669_1_, BlockPos pos, int p_175669_3_) {
+ }
+
+ @Override
+ public void playAuxSFX(int p_175718_1_, BlockPos pos, int p_175718_3_) {
+
+ }
+
+ @Override
+ public void playAuxSFXAtEntity(EntityPlayer player, int sfxType, BlockPos pos, int p_180498_4_) {
+
+ }
+
+ @Override
+ public int getHeight() {
+ return 256;
+ }
+
+ @Override
+ public int getActualHeight() {
+ return 256;
+ }
+
+ @Override
+ public void makeFireworks(double par1, double par3, double par5, double par7, double par9, double par11, NBTTagCompound par13nbtTagCompound) {
+ }
+
+ @Override
+ public boolean addTileEntity(TileEntity tile) {
+ return true;
+ }
+
+ @Override
+ public void addTileEntities(Collection tileEntityCollection) {
+ }
+
+ @Override
+ public boolean isBlockFullCube(BlockPos pos) {
+ return pos.getY() <= 63;
+ }
+
+ @Override
+ public boolean isInsideBorder(WorldBorder worldBorderIn, Entity entityIn) {
+ return true;
+ }
+
+ @Override
+ public List getEntities(Class extends T> entityType, Predicate super T> filter) {
+ return new ArrayList();
+ }
+
+ @Override
+ public List getEntitiesInAABBexcluding(Entity entityIn, AxisAlignedBB boundingBox, Predicate super Entity> predicate) {
+ return new ArrayList();
+ }
+
+ @Override
+ public List getEntitiesWithinAABB(Class extends T> classEntity, AxisAlignedBB bb) {
+ return new ArrayList();
+ }
+
+ @Override
+ public List getEntitiesWithinAABB(Class extends T> clazz, AxisAlignedBB aabb, Predicate super T> filter) {
+ return new ArrayList();
+ }
+
+ @Override
+ public List getEntitiesWithinAABBExcludingEntity(Entity entityIn, AxisAlignedBB bb) {
+ return new ArrayList();
+ }
+
+ @Override
+ public IChunkProvider getChunkProvider() {
+ return new FakeChunkProvider();
+ }
+
+ @Override
+ public Chunk getChunkFromChunkCoords(int par1, int par2) {
+ return null;
+ }
+
+}
diff --git a/src/minecraft/animeware/util/FakeUtils/FakeWorldProvider.java b/src/minecraft/animeware/util/FakeUtils/FakeWorldProvider.java
new file mode 100644
index 0000000..766c5ef
--- /dev/null
+++ b/src/minecraft/animeware/util/FakeUtils/FakeWorldProvider.java
@@ -0,0 +1,66 @@
+package animeware.util.FakeUtils;
+
+
+
+import net.minecraft.util.BlockPos;
+import net.minecraft.world.WorldProvider;
+import net.minecraft.world.chunk.IChunkProvider;
+
+public class FakeWorldProvider extends WorldProvider {
+
+ @Override
+ public String getDimensionName() {
+ return "";
+ }
+
+ @Override
+ public String getInternalNameSuffix() {
+ return "";
+ }
+
+ @Override
+ public BlockPos getSpawnCoordinate() {
+ return new BlockPos(0, 64, 0);
+ }
+
+ @Override
+ public IChunkProvider createChunkGenerator() {
+ return new FakeChunkProvider();
+ }
+
+ @Override
+ public boolean canCoordinateBeSpawn(int x, int z) {
+ return true;
+ }
+
+ @Override
+ public boolean canRespawnHere() {
+ return true;
+ }
+
+ @Override
+ public boolean isSurfaceWorld() {
+ return true;
+ }
+
+ @Override
+ public int getAverageGroundLevel() {
+ return 63;
+ }
+
+ @Override
+ public boolean doesXZShowFog(int x, int z) {
+ return false;
+ }
+
+ @Override
+ public boolean isSkyColored() {
+ return false;
+ }
+
+ @Override
+ public boolean doesWaterVaporize() {
+ return false;
+ }
+
+}
diff --git a/src/minecraft/animeware/util/FakeUtils/_ExampleGui.java b/src/minecraft/animeware/util/FakeUtils/_ExampleGui.java
new file mode 100644
index 0000000..ebdcec1
--- /dev/null
+++ b/src/minecraft/animeware/util/FakeUtils/_ExampleGui.java
@@ -0,0 +1,155 @@
+package animeware.util.FakeUtils;
+
+import java.util.UUID;
+
+import com.mojang.authlib.GameProfile;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.OpenGlHelper;
+import net.minecraft.client.renderer.RenderHelper;
+import net.minecraft.client.renderer.entity.RenderManager;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.passive.EntityRabbit;
+import net.minecraft.entity.passive.EntitySheep;
+import net.minecraft.item.EnumDyeColor;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.world.World;
+import net.minecraft.world.storage.WorldInfo;
+
+public class _ExampleGui extends GuiScreen {
+
+ private World world;
+ private FakePlayer player;
+ private EntitySheep sheep;
+ private EntityRabbit rabbit;
+
+ @Override
+ public void initGui() {
+
+ world = new FakeWorld(new WorldInfo(new NBTTagCompound()));
+
+ player = new FakePlayer(mc, world, new GameProfile(UUID.randomUUID(), "FakePlayer"));
+ player.setArrowCountInEntity(4);
+
+ sheep = new EntitySheep(world);
+ sheep.setFleeceColor(EnumDyeColor.YELLOW);
+ sheep.setFire(1);
+
+ rabbit = new EntityRabbit(world);
+ rabbit.setRabbitType(3);
+
+ mc.getRenderManager().cacheActiveRenderInfo(world, mc.fontRendererObj, player, player, mc.gameSettings, 0.0F);
+
+ }
+
+ int rotate = 0;
+
+ @Override
+ public void drawScreen(int mouseX2, int mouseY2, float partialTicks) {
+
+ drawBackground(0);
+
+ mc.thePlayer = player;
+ world.updateEntity(player);
+
+
+
+ if (mc.getRenderManager().worldObj == null || mc.getRenderManager().playerRenderer == null) {
+ mc.getRenderManager().cacheActiveRenderInfo(world, mc.fontRendererObj, player, player, mc.gameSettings, 0.0F);
+ }
+ if ((world != null) && (player != null)) {
+ mc.thePlayer = player;
+ ScaledResolution sr = new ScaledResolution(mc);
+
+ int distanceToSide = ((mc.currentScreen.width / 2)) / 2;
+ float targetHeight = (float) (sr.getScaledHeight_double() / 5.0F) / 1.8F;
+
+ drawEntityOnScreen(
+ sr.getScaledWidth() - distanceToSide - 200,
+ (int) ((sr.getScaledHeight() / 2) + (player.height * targetHeight)),
+ targetHeight,
+ rotate,
+ 180,
+ player);
+
+ drawEntityOnScreen(
+ sr.getScaledWidth() - distanceToSide - 300,
+ (int) ((sr.getScaledHeight() / 2) + (player.height * targetHeight)),
+ targetHeight,
+ 0,
+ rotate,
+ sheep);
+
+ drawEntityOnScreen(
+ sr.getScaledWidth() - distanceToSide - 10,
+ (int) ((sr.getScaledHeight() / 2) + (player.height * targetHeight)),
+ rotate,
+ rotate,
+ 180,
+ rabbit);
+
+
+ rotate+=5;
+ if(rotate<= -360 || rotate >= 360) {
+ rotate = 0;
+ }
+
+ }
+
+ super.drawScreen(mouseX2, mouseY2, partialTicks);
+
+ //get rid of the player after were done rendering it. We don't want to confuse the singleplayer gods
+ mc.thePlayer = null;
+ }
+
+ public static void drawEntityOnScreen(int posX, int posY, float scale, float yawRotate, float pitchRotate, EntityLivingBase ent) {
+ GlStateManager.disableBlend();
+ GlStateManager.depthMask(true);
+ GlStateManager.enableDepth();
+ GlStateManager.enableAlpha();
+ GlStateManager.enableColorMaterial();
+ GlStateManager.pushMatrix();
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ GlStateManager.translate(posX, posY, 50.0F);
+ GlStateManager.scale(-scale, scale, scale);
+ GlStateManager.rotate(pitchRotate, 0.0F, 0.0F, 1.0F);
+ GlStateManager.rotate(yawRotate, 0.0F, 1.0F, 0.0F);
+ float f2 = ent.renderYawOffset;
+ float f3 = ent.rotationYaw;
+ float f4 = ent.rotationPitch;
+ float f5 = ent.prevRotationYawHead;
+ float f6 = ent.rotationYawHead;
+ RenderHelper.enableStandardItemLighting();
+ ent.renderYawOffset = (float) Math.atan(yawRotate / 40.0F);
+ ent.rotationYaw = (float) Math.atan(yawRotate / 40.0F);
+ ent.rotationPitch = -((float) Math.atan(0 / 40.0F)) * 20.0F;
+ ent.rotationYawHead = ent.rotationYaw;
+ ent.prevRotationYawHead = ent.rotationYaw;
+ GlStateManager.translate(0.0F, 0.0F, 0.0F);
+ try {
+ RenderManager rendermanager = Minecraft.getMinecraft().getRenderManager();
+ rendermanager.setPlayerViewY(180.0F);
+ rendermanager.setRenderShadow(false);
+ rendermanager.doRenderEntity(ent, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F, true);
+ rendermanager.setRenderShadow(true);
+ }
+ finally {
+ ent.renderYawOffset = f2;
+ ent.rotationYaw = f3;
+ ent.rotationPitch = f4;
+ ent.prevRotationYawHead = f5;
+ ent.rotationYawHead = f6;
+ GlStateManager.popMatrix();
+ RenderHelper.disableStandardItemLighting();
+ GlStateManager.disableRescaleNormal();
+ GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit);
+ GlStateManager.disableTexture2D();
+ GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
+ GlStateManager.translate(0.0F, 0.0F, 20.0F);
+ }
+ }
+
+}
diff --git a/src/minecraft/animeware/util/MathUtils.java b/src/minecraft/animeware/util/MathUtils.java
new file mode 100644
index 0000000..4fdded6
--- /dev/null
+++ b/src/minecraft/animeware/util/MathUtils.java
@@ -0,0 +1,69 @@
+package animeware.util;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.security.SecureRandom;
+
+public class MathUtils {
+
+ public static int getRandomInRange(int min, int max) {
+ return (int) ((Math.random() * (max - min)) + min);
+ }
+
+ public static float getRandomInRange(float min, float max) {
+ SecureRandom random = new SecureRandom();
+ return random.nextFloat() * (max - min) + min;
+ }
+
+ public static double getRandomInRange(double min, double max) {
+ SecureRandom random = new SecureRandom();
+ return random.nextDouble() * (max - min) + min;
+ }
+
+ public static double lerp(double old, double newVal, double amount) {
+ return (1.0 - amount) * old + amount * newVal;
+ }
+
+ public static Double interpolate(double oldValue, double newValue, double interpolationValue){
+ return (oldValue + (newValue - oldValue) * interpolationValue);
+ }
+
+ public static float interpolateFloat(float oldValue, float newValue, double interpolationValue){
+ return interpolate(oldValue, newValue, (float) interpolationValue).floatValue();
+ }
+
+ public static int interpolateInt(int oldValue, int newValue, double interpolationValue){
+ return interpolate(oldValue, newValue, (float) interpolationValue).intValue();
+ }
+
+ public static float calculateGaussianValue(float x, float sigma) {
+ double PI = 3.141592653;
+ double output = 1.0 / Math.sqrt(2.0 * PI * (sigma * sigma));
+ return (float) (output * Math.exp(-(x * x) / (2.0 * (sigma * sigma))));
+ }
+
+ public static double roundToHalf(double d) {
+ return Math.round(d * 2) / 2.0;
+ }
+
+ public static double round(double num, double increment) {
+ BigDecimal bd = new BigDecimal(num);
+ bd = (bd.setScale((int) increment, RoundingMode.HALF_UP));
+ return bd.doubleValue();
+ }
+
+ public static double round(double value, int places) {
+ if (places < 0) {
+ throw new IllegalArgumentException();
+ }
+ BigDecimal bd = new BigDecimal(value);
+ bd = bd.setScale(places, RoundingMode.HALF_UP);
+ return bd.doubleValue();
+ }
+
+ public static float getRandomFloat(float max, float min) {
+ SecureRandom random = new SecureRandom();
+ return random.nextFloat() * (max - min) + min;
+ }
+
+}
diff --git a/src/minecraft/animeware/util/MouseUtils.java b/src/minecraft/animeware/util/MouseUtils.java
new file mode 100644
index 0000000..034334f
--- /dev/null
+++ b/src/minecraft/animeware/util/MouseUtils.java
@@ -0,0 +1,21 @@
+package animeware.util;
+
+import java.util.ArrayList;
+import org.lwjgl.input.Mouse;
+
+public class MouseUtils {
+ private boolean[] pressed = new boolean[] { Mouse.isButtonDown(0), Mouse.isButtonDown(1) };
+
+ private long lastLmbPressed;
+
+ private long lastRmbPressed;
+
+ private boolean wasLmbPressed;
+
+ private boolean wasRmbPressed;
+
+ private ArrayList lmb = new ArrayList<>();
+
+ private ArrayList rmb = new ArrayList<>();
+
+}
diff --git a/src/minecraft/animeware/util/RainbowColor.java b/src/minecraft/animeware/util/RainbowColor.java
new file mode 100644
index 0000000..65615f3
--- /dev/null
+++ b/src/minecraft/animeware/util/RainbowColor.java
@@ -0,0 +1,22 @@
+package animeware.util;
+
+import java.awt.Color;
+
+public class RainbowColor
+{
+
+
+ public static Color rainbowColor(int value)
+ {
+ Color clr = Color.getHSBColor(System.currentTimeMillis() % value * value, 1.0F, 1.0F);
+ return clr;
+ }
+
+ public static Color colorLerpv2(Color start, Color end, float ratio)
+ {
+ int i = (int)Math.abs(ratio * (float)start.getRed() + (1.0F - ratio) * (float)end.getRed());
+ int j = (int)Math.abs(ratio * (float)start.getGreen() + (1.0F - ratio) * (float)end.getGreen());
+ int k = (int)Math.abs(ratio * (float)start.getBlue() + (1.0F - ratio) * (float)end.getBlue());
+ return new Color(i, j, k);
+ }
+}
diff --git a/src/minecraft/animeware/util/RenderUtil.java b/src/minecraft/animeware/util/RenderUtil.java
new file mode 100644
index 0000000..04d7dd3
--- /dev/null
+++ b/src/minecraft/animeware/util/RenderUtil.java
@@ -0,0 +1,37 @@
+package animeware.util;
+
+import java.awt.Color;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+
+public class RenderUtil {
+
+ public static void drawChromaString(String string, int x, int y, boolean shadow)
+ {
+ Minecraft mc = Minecraft.getMinecraft();
+
+ int xTmp = x;
+ for (char textChar : string.toCharArray())
+ {
+ long l = System.currentTimeMillis() - (xTmp * 10 - y * 10);
+ int i = Color.HSBtoRGB(l % (int) 2000.0F / 2000.0F, 0.8F, 0.8F);
+ String tmp = String.valueOf(textChar);
+ mc.fontRendererObj.drawString(tmp, xTmp, y, i, shadow);
+ xTmp += mc.fontRendererObj.getCharWidth(textChar);
+ }
+ }
+
+ public static void drawHollowRect(int x, int y, int w, int h, int color) {
+
+ Gui.drawHorizontalLine(x, x + w, y, color);
+ Gui.drawHorizontalLine(x, x + w, y + h, color);
+
+ Gui.drawVerticalLine(x, y + h, y, color);
+ Gui.drawVerticalLine(x + w, y + h, y, color);
+
+ }
+
+
+
+}
diff --git a/src/minecraft/animeware/util/Utils.java b/src/minecraft/animeware/util/Utils.java
new file mode 100644
index 0000000..9429ba0
--- /dev/null
+++ b/src/minecraft/animeware/util/Utils.java
@@ -0,0 +1,9 @@
+package animeware.util;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+
+public interface Utils {
+ Minecraft mc = Minecraft.getMinecraft();
+ FontRenderer fr = mc.fontRendererObj;
+}
diff --git a/src/minecraft/animeware/util/account/Account.java b/src/minecraft/animeware/util/account/Account.java
new file mode 100644
index 0000000..cca49bc
--- /dev/null
+++ b/src/minecraft/animeware/util/account/Account.java
@@ -0,0 +1,99 @@
+package animeware.util.account;
+
+import java.awt.Color;
+import java.util.ArrayList;
+
+import animeware.hud.mod.HudMod;
+import animeware.util.render.GuiUtils;
+import animeware.util.render.ResourceUtils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+
+public class Account {
+
+ public ArrayList accounts = new ArrayList<>();
+
+ String username;
+
+ String email;
+
+ String accessToken;
+
+ String uuid;
+
+ float x;
+
+ float y;
+
+ Boolean cracked;
+
+ Boolean active;
+
+ public String getUsername() {
+ return this.username;
+ }
+
+ public String getEmail() {
+ return this.email;
+ }
+
+ public String getAccessToken() {
+ return this.accessToken;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public float getX() {
+ return this.x;
+ }
+
+ public float getY() {
+ return this.y;
+ }
+
+ public void setX(float x) {
+ this.x = x;
+ }
+
+ public void setY(float y) {
+ this.y = y;
+ }
+
+ public Boolean getCracked() {
+ return this.cracked;
+ }
+
+ public Boolean getActive() {
+ return this.active;
+ }
+
+ public Account(String username, String email, String accessToken, String uuid, boolean cracked) {
+ this.username = username;
+ this.email = email;
+ this.accessToken = accessToken;
+ this.uuid = uuid;
+ this.cracked = Boolean.valueOf(cracked);
+ }
+
+ public void render(float x, float y, float mx, float my) {
+ this.x = x;
+ this.y = y;
+ Color background = isHovering(mx, my) ? new Color(200, 200, 200, 120) : new Color(200, 200, 200, 75);
+ GuiUtils.drawRoundedRect(x, y, x + 10 + 45.0F, y + 24.0F, 5.0F, background.getRGB());
+ GuiUtils.drawRoundedOutline(x, y, x + 10 + 45.0F, y + 24.0F, 5.0F, 2.0F, -1);
+ //UrbanMainMenu.fontRenderer.drawString(getUsername(), x + 25.0F, y + 5.0F, (new Color(200, 200, 200, 200)).getRGB());
+ Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceUtils.getHeadLocation(getUsername()));
+ Gui.drawModalRectWithCustomSizedTexture((int)x + 2, (int)y + 2, 0.0F, 0.0F, 20, 20, 20.0F, 20.0F);
+ }
+
+ public boolean isHovering(float mouseX, float mouseY) {
+ return (mouseX >= this.x && mouseX <= 20 + 45.0F && mouseY >= this.y && mouseY <= this.y + 24.0F);
+ //return (mouseX >= this.x && mouseX <= this.x + UrbanMainMenu.fontRenderer.getStringWidth(getUsername()) + 45.0F && mouseY >= this.y && mouseY <= this.y + 24.0F);
+ }
+
+ public void setActive(Boolean active) {
+ this.active = active;
+ }
+}
diff --git a/src/minecraft/animeware/util/account/SessionChanger.java b/src/minecraft/animeware/util/account/SessionChanger.java
new file mode 100644
index 0000000..b2af668
--- /dev/null
+++ b/src/minecraft/animeware/util/account/SessionChanger.java
@@ -0,0 +1,150 @@
+package animeware.util.account;
+
+import java.io.IOException;
+import java.util.UUID;
+
+import com.mojang.authlib.Agent;
+import com.mojang.authlib.AuthenticationService;
+import com.mojang.authlib.UserAuthentication;
+import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService;
+import com.mojang.util.UUIDTypeAdapter;
+
+import animeware.NightSky;
+import fr.litarvan.openauth.microsoft.MicrosoftAuthResult;
+import fr.litarvan.openauth.microsoft.MicrosoftAuthenticationException;
+import fr.litarvan.openauth.microsoft.MicrosoftAuthenticator;
+import net.minecraft.client.Minecraft;
+import net.minecraft.util.Session;
+
+
+
+public class SessionChanger {
+
+ private static SessionChanger instance;
+ public final UserAuthentication auth;
+
+ public static SessionChanger getInstance() {
+ if (instance == null) {
+ instance = new SessionChanger();
+ }
+
+ return instance;
+ }
+
+ //Creates a new Authentication Service.
+ private SessionChanger() {
+ UUID notSureWhyINeedThis = UUID.randomUUID(); //Idk, needs a UUID. Seems to be fine making it random
+ AuthenticationService authService = new YggdrasilAuthenticationService(Minecraft.getMinecraft().getProxy(), notSureWhyINeedThis.toString());
+ auth = authService.createUserAuthentication(Agent.MINECRAFT);
+ authService.createMinecraftSessionService();
+ }
+
+
+ //Online mode
+ //Checks if your already loggin in to the account.
+ /*public void setUser(String email, String password) {
+ if(!Minecraft.getMinecraft().getSession().getUsername().equals(email) || Minecraft.getMinecraft().getSession().getToken().equals("0")){
+
+ this.auth.logOut();
+ this.auth.setUsername(email);
+ this.auth.setPassword(password);
+ try {
+ this.auth.logIn();
+ Session session = new Session(this.auth.getSelectedProfile().getName(), UUIDTypeAdapter.fromUUID(auth.getSelectedProfile().getId()), this.auth.getAuthenticatedToken(), this.auth.getUserType().getName());
+ setSession(session);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ }*/
+ public void setUser(String email, String password) {
+ if(!Minecraft.getMinecraft().getSession().getUsername().equals(email) || Minecraft.getMinecraft().getSession().getToken().equals("0")){
+
+ this.auth.logOut();
+ this.auth.setUsername(email);
+ this.auth.setPassword(password);
+ try {
+ this.auth.logIn();
+ Session session = new Session(this.auth.getSelectedProfile().getName(), UUIDTypeAdapter.fromUUID(auth.getSelectedProfile().getId()), this.auth.getAuthenticatedToken(), this.auth.getUserType().getName());
+ setSession(session);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ }
+
+ public void setUserMicrosoft(String email, String password) {
+
+ MicrosoftAuthenticator authenticator = new MicrosoftAuthenticator();
+ try {
+ MicrosoftAuthResult acc = authenticator.loginWithCredentials(email, password);
+ Minecraft.getMinecraft().session = new Session(acc.getProfile().getName(), acc.getProfile().getId(), acc.getAccessToken(), "legacy");
+
+ } catch (MicrosoftAuthenticationException e) {
+
+ }
+ }
+
+
+ public void setUserMicrosoft(String accessToken) {
+ MicrosoftAuthenticator authenticator = new MicrosoftAuthenticator();
+ try {
+ MicrosoftAuthResult acc = authenticator.loginWithRefreshToken(accessToken);
+ Session session = new Session(acc.getProfile().getName(), acc.getProfile().getId(), acc.getAccessToken(), "legacy");
+ setSession(session);
+ NightSky.getInstance().addAccount(new Account(acc.getProfile().getName(), "N/A", accessToken, acc.getProfile().getId(), true));
+ } catch (MicrosoftAuthenticationException microsoftAuthenticationException) {}
+ }
+
+
+
+ public void microsoftLogin() {
+
+ MicrosoftAuthenticator authenticator = new MicrosoftAuthenticator();
+ try {
+ MicrosoftAuthResult acc = authenticator.loginWithWebview();
+ Session session = new Session(acc.getProfile().getName(), acc.getProfile().getId(), acc.getAccessToken(), "legacy");
+ setSession(session);
+ //UrbanClient.getInstance().addAccount(new Account(acc.getProfile().getName(), "N/A", acc.getRefreshToken(), acc.getProfile().getId(), true));
+ } catch (MicrosoftAuthenticationException microsoftAuthenticationException) {
+ microsoftAuthenticationException.printStackTrace();
+ }
+
+
+
+ }/*
+ public void microsoftLogin(String mail, String pass) {
+ MicrosoftAuthenticator authenticator = new MicrosoftAuthenticator();
+ MicrosoftAuthResult result = null;
+ try {
+ result = authenticator.loginWithCredentials(mail,pass);
+ System.out.printf("Logged in with '%s'%n", result.getProfile().getName());
+ Minecraft.getMinecraft().session = new Session(result.getProfile().getName(),result.getProfile().getId(), result.getAccessToken(),"legacy");
+
+
+ } catch (MicrosoftAuthenticationException e) {
+ e.printStackTrace();
+ }
+
+ }*/
+
+
+ //Sets the session.
+ //You need to make this public, and remove the final modifier on the session Object.
+ public void setSession(Session session) {
+ Minecraft.getMinecraft().session = session;
+ }
+
+ //Login offline mode
+ //Just like MCP does
+ public void setUserOffline(String username) {
+ this.auth.logOut();
+ Session session = new Session(username, username, "0", "legacy");
+ setSession(session);
+ }
+
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/util/animations/Animation.java b/src/minecraft/animeware/util/animations/Animation.java
new file mode 100644
index 0000000..88b2b74
--- /dev/null
+++ b/src/minecraft/animeware/util/animations/Animation.java
@@ -0,0 +1,99 @@
+package animeware.util.animations;
+
+import animeware.util.timer.TimerUtil;
+
+/**
+ * This animation superclass was made by Foggy and advanced by cedo
+ *
+ * @author Foggy
+ * @author cedo
+ * @since 7/21/2020 (yes 2020)
+ * @since 7/29/2021
+ */
+public abstract class Animation {
+
+ public TimerUtil timerUtil = new TimerUtil();
+ protected int duration;
+ protected double endPoint;
+ protected Direction direction;
+
+ public Animation(int ms, double endPoint) {
+ this.duration = ms;
+ this.endPoint = endPoint;
+ this.direction = Direction.FORWARDS;
+ }
+
+
+ public Animation(int ms, double endPoint, Direction direction) {
+ this.duration = ms; //Time in milliseconds of how long you want the animation to take.
+ this.endPoint = endPoint; //The desired distance for the animated object to go.
+ this.direction = direction; //Direction in which the graph is going. If backwards, will start from endPoint and go to 0.
+ }
+
+ public boolean finished(Direction direction) {
+ return isDone() && this.direction.equals(direction);
+ }
+
+ public double getLinearOutput() {
+ return 1 - ((timerUtil.getTime() / (double) duration) * endPoint);
+ }
+
+ public double getEndPoint() {
+ return endPoint;
+ }
+
+ public void setEndPoint(double endPoint) {
+ this.endPoint = endPoint;
+ }
+
+ public void reset() {
+ timerUtil.reset();
+ }
+
+ public boolean isDone() {
+ return timerUtil.hasTimeElapsed(duration);
+ }
+
+ public void changeDirection() {
+ setDirection(direction.opposite());
+ }
+
+ public Direction getDirection() {
+ return direction;
+ }
+
+ public void setDirection(Direction direction) {
+ if (this.direction != direction) {
+ this.direction = direction;
+ timerUtil.setTime(System.currentTimeMillis() - (duration - Math.min(duration, timerUtil.getTime())));
+ }
+ }
+
+ public void setDuration(int duration) {
+ this.duration = duration;
+ }
+
+ protected boolean correctOutput() {
+ return false;
+ }
+
+ public double getOutput() {
+ if (direction == Direction.FORWARDS) {
+ if (isDone())
+ return endPoint;
+ return (getEquation(timerUtil.getTime()) * endPoint);
+ } else {
+ if (isDone()) return 0;
+ if (correctOutput()) {
+ double revTime = Math.min(duration, Math.max(0, duration - timerUtil.getTime()));
+ return getEquation(revTime) * endPoint;
+ } else return (1 - getEquation(timerUtil.getTime())) * endPoint;
+ }
+ }
+
+
+ //This is where the animation equation should go, for example, a logistic function. Output should range from 0 - 1.
+ //This will take the timer's time as an input, x.
+ protected abstract double getEquation(double x);
+
+}
diff --git a/src/minecraft/animeware/util/animations/Direction.java b/src/minecraft/animeware/util/animations/Direction.java
new file mode 100644
index 0000000..7b8ffe3
--- /dev/null
+++ b/src/minecraft/animeware/util/animations/Direction.java
@@ -0,0 +1,13 @@
+package animeware.util.animations;
+
+public enum Direction {
+ FORWARDS,
+ BACKWARDS;
+
+ public Direction opposite() {
+ if (this == Direction.FORWARDS) {
+ return Direction.BACKWARDS;
+ } else return Direction.FORWARDS;
+ }
+
+}
diff --git a/src/minecraft/animeware/util/animations/impl/DecelerateAnimation.java b/src/minecraft/animeware/util/animations/impl/DecelerateAnimation.java
new file mode 100644
index 0000000..d6d7c34
--- /dev/null
+++ b/src/minecraft/animeware/util/animations/impl/DecelerateAnimation.java
@@ -0,0 +1,21 @@
+package animeware.util.animations.impl;
+
+
+import animeware.util.animations.Animation;
+import animeware.util.animations.Direction;
+
+public class DecelerateAnimation extends Animation {
+
+ public DecelerateAnimation(int ms, double endPoint) {
+ super(ms, endPoint);
+ }
+
+ public DecelerateAnimation(int ms, double endPoint, Direction direction) {
+ super(ms, endPoint, direction);
+ }
+
+ protected double getEquation(double x) {
+ double x1 = x / duration;
+ return 1 - ((x1 - 1) * (x1 - 1));
+ }
+}
diff --git a/src/minecraft/animeware/util/animations/impl/EaseBackIn.java b/src/minecraft/animeware/util/animations/impl/EaseBackIn.java
new file mode 100644
index 0000000..2a400a6
--- /dev/null
+++ b/src/minecraft/animeware/util/animations/impl/EaseBackIn.java
@@ -0,0 +1,31 @@
+package animeware.util.animations.impl;
+
+import animeware.util.animations.Animation;
+import animeware.util.animations.Direction;
+
+public class EaseBackIn extends Animation {
+ private final float easeAmount;
+
+ public EaseBackIn(int ms, double endPoint, float easeAmount) {
+ super(ms, endPoint);
+ this.easeAmount = easeAmount;
+ }
+
+ public EaseBackIn(int ms, double endPoint, float easeAmount, Direction direction) {
+ super(ms, endPoint, direction);
+ this.easeAmount = easeAmount;
+ }
+
+ @Override
+ protected boolean correctOutput() {
+ return true;
+ }
+
+ @Override
+ protected double getEquation(double x) {
+ double x1 = x / duration;
+ float shrink = easeAmount + 1;
+ return Math.max(0, 1 + shrink * Math.pow(x1 - 1, 3) + easeAmount * Math.pow(x1 - 1, 2));
+ }
+
+}
diff --git a/src/minecraft/animeware/util/animations/impl/EaseInOutQuad.java b/src/minecraft/animeware/util/animations/impl/EaseInOutQuad.java
new file mode 100644
index 0000000..023c36e
--- /dev/null
+++ b/src/minecraft/animeware/util/animations/impl/EaseInOutQuad.java
@@ -0,0 +1,21 @@
+package animeware.util.animations.impl;
+
+import animeware.util.animations.Animation;
+import animeware.util.animations.Direction;
+
+public class EaseInOutQuad extends Animation {
+
+ public EaseInOutQuad(int ms, double endPoint) {
+ super(ms, endPoint);
+ }
+
+ public EaseInOutQuad(int ms, double endPoint, Direction direction) {
+ super(ms, endPoint, direction);
+ }
+
+ protected double getEquation(double x1) {
+ double x = x1 / duration;
+ return x < 0.5 ? 2 * Math.pow(x, 2) : 1 - Math.pow(-2 * x + 2, 2) / 2;
+ }
+
+}
diff --git a/src/minecraft/animeware/util/animations/impl/ElasticAnimation.java b/src/minecraft/animeware/util/animations/impl/ElasticAnimation.java
new file mode 100644
index 0000000..37d43a2
--- /dev/null
+++ b/src/minecraft/animeware/util/animations/impl/ElasticAnimation.java
@@ -0,0 +1,32 @@
+package animeware.util.animations.impl;
+
+import animeware.util.animations.Animation;
+import animeware.util.animations.Direction;
+
+public class ElasticAnimation extends Animation {
+
+ float easeAmount;
+ float smooth;
+ boolean reallyElastic;
+
+ public ElasticAnimation(int ms, double endPoint, float elasticity, float smooth, boolean moreElasticity) {
+ super(ms, endPoint);
+ this.easeAmount = elasticity;
+ this.smooth = smooth;
+ this.reallyElastic = moreElasticity;
+ }
+
+ public ElasticAnimation(int ms, double endPoint, float elasticity, float smooth, boolean moreElasticity, Direction direction) {
+ super(ms, endPoint, direction);
+ this.easeAmount = elasticity;
+ this.smooth = smooth;
+ this.reallyElastic = moreElasticity;
+ }
+
+ @Override
+ protected double getEquation(double x) {
+ double x1 = Math.pow(x / duration, smooth); //Used to force input to range from 0 - 1
+ double elasticity = easeAmount * .1f;
+ return Math.pow(2, -10 * (reallyElastic ? Math.sqrt(x1) : x1)) * Math.sin((x1 - (elasticity / 4)) * ((2 * Math.PI) / elasticity)) + 1;
+ }
+}
diff --git a/src/minecraft/animeware/util/animations/impl/SmoothStepAnimation.java b/src/minecraft/animeware/util/animations/impl/SmoothStepAnimation.java
new file mode 100644
index 0000000..e15cc15
--- /dev/null
+++ b/src/minecraft/animeware/util/animations/impl/SmoothStepAnimation.java
@@ -0,0 +1,21 @@
+package animeware.util.animations.impl;
+
+import animeware.util.animations.Animation;
+import animeware.util.animations.Direction;
+
+public class SmoothStepAnimation extends Animation {
+
+ public SmoothStepAnimation(int ms, double endPoint) {
+ super(ms, endPoint);
+ }
+
+ public SmoothStepAnimation(int ms, double endPoint, Direction direction) {
+ super(ms, endPoint, direction);
+ }
+
+ protected double getEquation(double x) {
+ double x1 = x / (double) duration; //Used to force input to range from 0 - 1
+ return -2 * Math.pow(x1, 3) + (3 * Math.pow(x1, 2));
+ }
+
+}
diff --git a/src/minecraft/animeware/util/backend/AntiCheat.java b/src/minecraft/animeware/util/backend/AntiCheat.java
new file mode 100644
index 0000000..361a9e7
--- /dev/null
+++ b/src/minecraft/animeware/util/backend/AntiCheat.java
@@ -0,0 +1,167 @@
+package animeware.util.backend;
+
+import java.io.File;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.security.MessageDigest;
+import java.util.Vector;
+
+import org.apache.commons.io.FileUtils;
+
+import animeware.DiscordRP;
+import animeware.cosmetic.Booleans;
+import animeware.util.misc.WebhookUtil;
+import net.minecraft.client.Minecraft;
+
+public class AntiCheat {
+
+ public static String HWID;
+
+ public static boolean checkVape() {
+ try {
+ final ClassLoader classLoader = ClassLoader.getSystemClassLoader();
+ final Field classesField = ClassLoader.class.getDeclaredField("classes");
+ classesField.setAccessible(true);
+ final Vector> classes = (Vector>) classesField.get(classLoader);
+ for (Class> classFor : classes) {
+ if (classFor.getName().equalsIgnoreCase("a.A")) {
+ for (Method method : classFor.getMethods()) {
+ if (method.getName().equals("test") && method.getParameterCount() == 0) {
+ System.out.println("Succesfully checked for Vape v4 = Injected");
+ return true;
+ }
+ }
+ }
+ }
+ System.out.println("Succesfully checked for Vape v4 = Not Injected");
+ } catch (Exception e) {
+ System.out.println("Failed the check for Vape v4");
+ e.printStackTrace();
+ }
+
+ return false;
+ }
+
+ public static boolean checkSigma() {
+ if(!(FileUtils.getUserDirectoryPath() + "/AppData/Roaming/.minecraft/sigma").isEmpty()) {
+ return true;
+ } else if(!(FileUtils.getUserDirectoryPath() + "/AppData/Roaming/.minecraft/versions/Sigma").isEmpty()) {
+ return true;
+ } if(!(FileUtils.getUserDirectoryPath() + "/AppData/Roaming/.minecraft/versions/Sigma5").isEmpty()) {
+ return true;
+ } else return false;
+ }
+ public static boolean checkZeroDay() {
+ if(!(FileUtils.getUserDirectoryPath() + "/AppData/Roaming/.minecraft/ZeroDay").isEmpty()) {
+ return true;
+ } else if(!(FileUtils.getUserDirectoryPath() + "/AppData/Roaming/.minecraft/versions/ZeroDay").isEmpty()) {
+ return true;
+ } else return true;
+ }
+ public static boolean checkImpact() {
+ if(!(FileUtils.getUserDirectoryPath() + "/AppData/Roaming/.minecraft/Impact").isEmpty()) {
+ return true;
+ } else if(!(FileUtils.getUserDirectoryPath() + "/AppData/Roaming/.minecraft/versions/1.16.5-Impact_4.9.1-OptiFine_HD_U_G8").isEmpty()) {
+ return true;
+ } else return false;
+ }
+
+ public static void doAnticheat() {
+ checkVape();
+ checkSigma();
+ checkZeroDay();
+ checkImpact();
+
+ if(checkVape() == true) {
+ Booleans.ban = true;
+ System.out.println(DiscordRP.getDiscordName(null) + " - " + (Minecraft.getMinecraft().getSession().getUsername()) + "HWID: "+ AntiCheat.getHWID() + " was banned for: Vape");
+ }
+ if(checkSigma() == true) {
+ //Animeware.ban = true;
+ System.out.println(DiscordRP.getDiscordName(null) + " - " + (Minecraft.getMinecraft().getSession().getUsername()) + " has: Sigma");
+ }
+ if(checkZeroDay() == true) {
+ //Animeware.ban = true;
+ System.out.println(DiscordRP.getDiscordName(null) + " - " + (Minecraft.getMinecraft().getSession().getUsername()) + " has: ZeroDay");
+ }
+ if(checkImpact() == true) {
+ //Animeware.ban = true;
+ System.out.println(DiscordRP.getDiscordName(null) + " - " + (Minecraft.getMinecraft().getSession().getUsername()) + " has: Impact");
+ }
+ }
+ public static void deleteSigma() {
+
+ File sigmaDataDir = new File(FileUtils.getUserDirectoryPath() + "/AppData/Roaming/.minecraft/sigma");
+ File sigmaVerDir = new File(FileUtils.getUserDirectoryPath() + "/AppData/Roaming/.minecraft/versions/Sigma");
+ File sigmaNewVerDir = new File(FileUtils.getUserDirectoryPath() + "/AppData/Roaming/.minecraft/versions/Sigma5");
+ try {
+ FileUtils.deleteDirectory(sigmaDataDir);
+ FileUtils.deleteDirectory(sigmaVerDir);
+ FileUtils.deleteDirectory(sigmaNewVerDir);
+ System.out.println("HackDelete Succesfull! - Sigma");
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ System.out.println("HackDelete Failed! - Sigma");
+ }
+
+ }
+
+ public static void deleteZeroDay() {
+
+ File zeroDayData = new File(FileUtils.getUserDirectoryPath() + "/AppData/Roaming/.minecraft/ZeroDay");
+ File zeroDayVer = new File(FileUtils.getUserDirectoryPath() + "/AppData/Roaming/.minecraft/versions/ZeroDay");
+ try {
+ FileUtils.deleteDirectory(zeroDayData);
+ FileUtils.deleteDirectory(zeroDayVer);
+ System.out.println("HackDelete Succesfull! - ZeroDay");
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ System.out.println("HackDelete Failed! - ZeroDay");
+ }
+ }
+ public static void deleteImpact() {
+
+ File impactData = new File(FileUtils.getUserDirectoryPath() + "/AppData/Roaming/.minecraft/Impact");
+ File impactVer = new File(FileUtils.getUserDirectoryPath() + "/AppData/Roaming/.minecraft/versions/1.16.5-Impact_4.9.1-OptiFine_HD_U_G8");
+ try {
+ FileUtils.deleteDirectory(impactData);
+ FileUtils.deleteDirectory(impactVer);
+ System.out.println("HackDelete Succesfull! - Impact");
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ System.out.println("HackDelete Failed! - Impact");
+ }
+ }
+ public static void removeCheats() {
+ deleteSigma();
+ deleteZeroDay();
+ deleteImpact();
+ }
+ public static String getHWID() {
+ try{
+ String toEncrypt = System.getenv("COMPUTERNAME") + System.getProperty("user.name") + System.getenv("PROCESSOR_IDENTIFIER") + System.getenv("PROCESSOR_LEVEL");
+ MessageDigest md = MessageDigest.getInstance("MD5");
+ md.update(toEncrypt.getBytes());
+ StringBuffer hexString = new StringBuffer();
+
+ byte byteData[] = md.digest();
+
+ for (byte aByteData : byteData) {
+ String hex = Integer.toHexString(0xff & aByteData);
+ if (hex.length() == 1) hexString.append('0');
+ hexString.append(hex);
+ }
+
+ HWID = hexString.toString();
+ System.out.println(HWID);
+
+ return hexString.toString();
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.out.println("error");
+ return "Error";
+ }
+ }
+
+}
diff --git a/src/minecraft/animeware/util/backend/Security.java b/src/minecraft/animeware/util/backend/Security.java
new file mode 100644
index 0000000..0802f2c
--- /dev/null
+++ b/src/minecraft/animeware/util/backend/Security.java
@@ -0,0 +1,79 @@
+package animeware.util.backend;
+import org.apache.commons.codec.Charsets;
+import org.apache.http.Header;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.util.EntityUtils;
+import org.json.JSONObject;
+
+import animeware.util.misc.Identification;
+
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.security.MessageDigest;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.security.MessageDigest;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.security.MessageDigest;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.security.MessageDigest;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.security.MessageDigest;
+
+
+public class Security {
+
+ public static boolean isVPN() {
+ try {
+ HttpClient client = HttpClientBuilder.create().build();
+ HttpGet post = new HttpGet("https://ipqualityscore.com/api/json/ip/oOswzMILsf8QA7JGtaQDdXARfDtbKW1K/" + Identification.getIP());
+
+ post.setHeader("Content-type", "application/json");
+
+ HttpResponse response = client.execute(post);
+
+ HttpEntity entity = response.getEntity();
+ Header encodingHeader = entity.getContentEncoding();
+
+ // you need to know the encoding to parse correctly
+ Charset encoding = encodingHeader == null ? StandardCharsets.UTF_8 :
+ Charsets.toCharset(encodingHeader.getValue());
+
+ // use org.apache.http.util.EntityUtils to read json as string
+ String json = EntityUtils.toString(entity, StandardCharsets.UTF_8);
+
+ JSONObject o = new JSONObject(json);
+
+ if(o.getBoolean("proxy") || o.getBoolean("vpn") || o.getBoolean("active_vpn")) {
+ System.out.println("epic vpn $$");
+ return true;
+ } else return false;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+}
diff --git a/src/minecraft/animeware/util/backend/WebSockets.java b/src/minecraft/animeware/util/backend/WebSockets.java
new file mode 100644
index 0000000..69bf491
--- /dev/null
+++ b/src/minecraft/animeware/util/backend/WebSockets.java
@@ -0,0 +1,35 @@
+package animeware.util.backend;
+
+import animeware.util.websockets.SocketClient;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.util.ResourceLocation;
+
+public class WebSockets {
+
+ public static String getImage() {
+ //if((boolean)SocketClient.isUser(((AbstractClientPlayer) AbstractClientPlayer).getGameProfile().getName())) {
+ if(Minecraft.getMinecraft().thePlayer.getName().equals("hypnomacka")) {
+ //Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/nightskyowner.png"));
+ return "Animeware/nightskyowner.png";
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("KnownAsR3named") || Minecraft.getMinecraft().thePlayer.getName().equals("Fofola") || Minecraft.getMinecraft().thePlayer.getName().equals("abcdefgh8") || Minecraft.getMinecraft().thePlayer.getName().equals("slepica") || Minecraft.getMinecraft().thePlayer.getName().equals("nhm")) {
+ //Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/nightskystaff.png"));
+ return "Animeware/nightskystaff.png";
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals("_Marto__")) {
+ //Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/nightskyyt.png"));
+ return "Animeware/nightskyyt.png";
+ } else if(Minecraft.getMinecraft().thePlayer.getName().equals(Minecraft.getMinecraft().thePlayer.getName())) {
+ //Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("Animeware/nightskywhite.png"));
+ return "Animeware/nightskywhite.png";
+ } else {
+ return "Animeware/cosmetic/capes/blank.png";
+ }
+ //}
+
+
+
+ }
+
+}
diff --git a/src/minecraft/animeware/util/config/AccountConfig.java b/src/minecraft/animeware/util/config/AccountConfig.java
new file mode 100644
index 0000000..d38b50f
--- /dev/null
+++ b/src/minecraft/animeware/util/config/AccountConfig.java
@@ -0,0 +1,102 @@
+package animeware.util.config;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.mojang.authlib.UserAuthentication;
+import com.mojang.util.UUIDTypeAdapter;
+
+import animeware.NightSky;
+import animeware.util.account.Account;
+import animeware.util.account.SessionChanger;
+import net.minecraft.util.Session;
+
+public class AccountConfig {
+ public final Gson gson = (new GsonBuilder()).setPrettyPrinting().create();
+
+ public final File file = new File("NightSky/Account.ns");
+
+ public void save() {
+ JsonArray accounts = new JsonArray();
+ for (Account a : NightSky.accountManager) {
+ a.setActive(Boolean.valueOf(false));
+ JsonObject jsonAccount = new JsonObject();
+ jsonAccount.addProperty("accessToken", a.getAccessToken());
+ jsonAccount.addProperty("username", a.getUsername());
+ jsonAccount.addProperty("uuid", a.getUuid());
+ jsonAccount.addProperty("email", a.getEmail());
+ jsonAccount.addProperty("microsoft", a.getCracked());
+ if (a.equals(NightSky.accountManager.get(NightSky.accountManager.size() - 1)))
+ a.setActive(Boolean.valueOf(true));
+ jsonAccount.addProperty("active", a.getActive());
+ accounts.add((JsonElement)jsonAccount);
+ }
+ if (!this.file.getParentFile().exists())
+ this.file.getParentFile().mkdirs();
+ String s = this.gson.toJson((JsonElement)accounts);
+ try {
+ this.file.createNewFile();
+ FileWriter fw = new FileWriter(this.file.getPath());
+ fw.write(s);
+ fw.flush();
+ fw.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void load() {
+ try {
+ BufferedReader br = new BufferedReader(new FileReader(this.file.getPath()));
+ JsonArray accounts = (JsonArray)this.gson.fromJson(br, JsonArray.class);
+ if (!accounts.isJsonNull() &&
+ accounts.size() > 0) {
+ JsonObject account = accounts.get(accounts.size() - 1).getAsJsonObject();
+ for (JsonElement je : accounts) {
+ if (je.getAsJsonObject().get("active").getAsBoolean()) {
+ account = je.getAsJsonObject();
+ String str5 = account.get("accessToken").getAsString();
+ String str6 = account.get("username").getAsString();
+ String str7 = account.get("uuid").getAsString();
+ String str8 = account.get("email").getAsString();
+ boolean bool1 = account.get("microsoft").getAsBoolean();
+ NightSky.accountManager.add(new Account(str6, str8, str5, str7, bool1));
+ continue;
+ }
+ String str1 = je.getAsJsonObject().get("accessToken").getAsString();
+ String str2 = je.getAsJsonObject().get("username").getAsString();
+ String str3 = je.getAsJsonObject().get("uuid").getAsString();
+ String str4 = je.getAsJsonObject().get("email").getAsString();
+ boolean bool = je.getAsJsonObject().get("microsoft").getAsBoolean();
+ NightSky.accountManager.add(new Account(str2, str4, str1, str3, bool));
+ }
+ String accessToken = account.get("accessToken").getAsString();
+ String username = account.get("username").getAsString();
+ String uuid = account.get("uuid").getAsString();
+ String email = account.get("email").getAsString();
+ boolean microsoft = account.get("microsoft").getAsBoolean();
+ if (microsoft) {
+ SessionChanger.getInstance().setUserMicrosoft(accessToken);
+ } else {
+ SessionChanger.getInstance().setSession(new Session(username, uuid, accessToken, "mojang"));
+ UserAuthentication auth = (SessionChanger.getInstance()).auth;
+ auth.setUsername(email);
+ auth.logIn();
+ Session session = new Session(auth.getSelectedProfile().getName(), UUIDTypeAdapter.fromUUID(auth.getSelectedProfile().getId()), auth.getAuthenticatedToken(), auth.getSelectedProfile().getName());
+ SessionChanger.getInstance().setSession(session);
+ }
+ }
+ } catch (FileNotFoundException|com.mojang.authlib.exceptions.AuthenticationException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/minecraft/animeware/util/config/Config.java b/src/minecraft/animeware/util/config/Config.java
new file mode 100644
index 0000000..1145f61
--- /dev/null
+++ b/src/minecraft/animeware/util/config/Config.java
@@ -0,0 +1,141 @@
+package animeware.util.config;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+
+import animeware.NightSky;
+import animeware.cosmetic.CosmeticModule;
+import animeware.hud.mod.HudMod;
+import animeware.util.account.Account;
+import animeware.util.settings.ModeSetting;
+import animeware.util.settings.Setting;
+import net.minecraft.client.Minecraft;
+
+public class Config {
+ public File configFolder = new File("NightSky");
+
+ //public File modsFolder = new File("NightSky/Mods");
+
+ public Configuration config;
+
+ public Configuration configToSave = ConfigurationAPI.newConfiguration(new File("NightSky/Config.ns"));
+
+ public final File file = new File("NightSky/Accounts.json");
+
+ public final Gson gson = (new GsonBuilder()).setPrettyPrinting().create();
+
+ public void saveModConfig() {
+ if (!this.configFolder.exists())
+ this.configFolder.mkdirs();
+
+ System.out.println("Saving Module Configuration");
+ for (HudMod m : NightSky.INSTANCE.hudManager.hudMods) {
+ this.configToSave.set(String.valueOf(m.name.toLowerCase()) + " x", m.getX());
+ this.configToSave.set(String.valueOf(m.name.toLowerCase()) + " y", m.getY());
+ this.configToSave.set(String.valueOf(m.name.toLowerCase()) + " enabled", m.isEnabled());
+ for(Setting setting : m.settings) {
+ if(setting instanceof ModeSetting) {
+ ModeSetting mode = (ModeSetting) setting;
+
+ try {
+ //configToSave.add("setting:" + m.name + ":" + setting.name + ":" + mode.getMode());
+ this.configToSave.set(String.valueOf(m.name.toLowerCase()) + " setting " + setting.name, mode.getMode());
+ } catch(ArrayIndexOutOfBoundsException e) {
+ System.out.println("Setting save failed - Config");
+ }
+ }
+ }
+ }
+ System.out.println("Saving Cosmetics Configuration");
+ for (CosmeticModule m : NightSky.INSTANCE.cosManager.cosmetics) {
+ this.configToSave.set(String.valueOf(m.name.toLowerCase()) + " wearing", m.isEnabled());
+ }
+ try {
+ this.configToSave.save();
+ } catch (IOException e) {
+ e.printStackTrace();
+ System.out.println("Config Save Failed");
+ }
+ /*System.out.println("Saving Cosmetic Configuration");
+ for (CosmeticModule m : NightSky.INSTANCE.cosManager.cosmetics) {
+ this.configToSave.set(String.valueOf(m.name.toLowerCase()) + " on", m.isEnabled());
+ }
+ try {
+ this.cosmeticToSave.save();
+ } catch (IOException e) {
+ e.printStackTrace();
+ System.out.println("Cosmetic Config Save Failed");
+ } */
+}
+
+ public void saveAccount() {
+ try {
+ JsonArray accounts = new JsonArray();
+ try {
+ for (Account a : NightSky.accountManager) {
+ a.setActive(Boolean.valueOf(false));
+ JsonObject jsonAccount = new JsonObject();
+ jsonAccount.addProperty("accessToken", a.getAccessToken());
+ jsonAccount.addProperty("username", a.getUsername());
+ jsonAccount.addProperty("uuid", a.getUuid());
+ jsonAccount.addProperty("email", a.getEmail());
+ jsonAccount.addProperty("microsoft", a.getCracked());
+ if (a.equals(NightSky.accountManager.get(NightSky.accountManager.size() - 1)))
+ a.setActive(Boolean.valueOf(true));
+ jsonAccount.addProperty("active", a.getActive());
+ accounts.add((JsonElement)jsonAccount);
+ }
+ /*for(Account a : NightSky.INSTANCE.acc.accounts) {
+ this.accountToSave.get("Name: " + a.getUsername());
+ this.accountToSave.get("UUID: " + a.getUuid());
+ this.accountToSave.get("Cracked: " + a.getCracked());
+ }*/
+ } catch(NullPointerException e) {
+ e.printStackTrace();
+ System.out.println("FAIL");
+ }
+ System.out.println("Saving Account Configuration");
+ if (!this.file.getParentFile().exists())
+ this.file.getParentFile().mkdirs();
+ String s = this.gson.toJson((JsonElement)accounts);
+ try {
+ this.file.createNewFile();
+ FileWriter fw = new FileWriter(this.file.getPath());
+ fw.write(s);
+ fw.flush();
+ fw.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ } catch(NullPointerException e) {
+ e.printStackTrace();
+ System.out.println("Ahhh shit, here we go again");
+ }
+ /*try {
+ this.accountToSave.save();
+ } catch (IOException e) {
+ e.printStackTrace();
+ System.out.println("Account Save Failed");
+ }*/
+ }
+
+
+ public void loadModConfig() {
+ try {
+ this.config = ConfigurationAPI.loadExistingConfiguration(new File("NightSky/Config.ns"));
+ System.out.println("Load Sucessful");
+ } catch (IOException e) {
+ e.printStackTrace();
+ System.out.println("Failed to load config - Config");
+ }
+ }
+
+
+}
diff --git a/src/minecraft/animeware/util/config/Configuration.java b/src/minecraft/animeware/util/config/Configuration.java
new file mode 100644
index 0000000..3751a72
--- /dev/null
+++ b/src/minecraft/animeware/util/config/Configuration.java
@@ -0,0 +1,41 @@
+package animeware.util.config;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import org.json.JSONObject;
+
+public class Configuration {
+ private File file;
+
+ public Map options;
+
+ public Configuration(File file, Map options) {
+ this.file = file;
+ this.options = options;
+ }
+
+ public Configuration(File file) {
+ this.file = file;
+ this.options = new HashMap<>();
+ }
+
+ public Object get(String pos) {
+ return this.options.get(pos);
+ }
+
+ public void set(String key, Object value) {
+ this.options.put(key, value);
+ }
+
+ public void save() throws IOException {
+ JSONObject jsonObject = new JSONObject(this.options);
+ this.file.createNewFile();
+ FileWriter fileWriter = new FileWriter(this.file);
+ fileWriter.write(jsonObject.toString());
+ fileWriter.flush();
+ fileWriter.close();
+ }
+}
diff --git a/src/minecraft/animeware/util/config/ConfigurationAPI.java b/src/minecraft/animeware/util/config/ConfigurationAPI.java
new file mode 100644
index 0000000..56bbead
--- /dev/null
+++ b/src/minecraft/animeware/util/config/ConfigurationAPI.java
@@ -0,0 +1,18 @@
+package animeware.util.config;
+
+import java.io.File;
+import java.io.IOException;
+import org.apache.commons.io.Charsets;
+import org.apache.commons.io.FileUtils;
+import org.json.JSONObject;
+
+public class ConfigurationAPI {
+ public static Configuration loadExistingConfiguration(File file) throws IOException {
+ JSONObject jsonObject = new JSONObject(FileUtils.readFileToString(file, Charsets.UTF_8));
+ return new Configuration(file, jsonObject.toMap());
+ }
+
+ public static Configuration newConfiguration(File file) {
+ return new Configuration(file);
+ }
+}
diff --git a/src/minecraft/animeware/util/config/SaveLoad.java b/src/minecraft/animeware/util/config/SaveLoad.java
new file mode 100644
index 0000000..c884646
--- /dev/null
+++ b/src/minecraft/animeware/util/config/SaveLoad.java
@@ -0,0 +1,154 @@
+package animeware.util.config;
+
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+
+import animeware.NightSky;
+import animeware.hud.mod.HudMod;
+import animeware.hud.mod.HudMod;
+import animeware.util.settings.BooleanSetting;
+import animeware.util.settings.ModeSetting;
+import animeware.util.settings.NumberSetting;
+import animeware.util.settings.Setting;
+import net.minecraft.client.Minecraft;
+//import wtf.monsoon.NightSky;
+
+
+public class SaveLoad {
+
+ public String configFileName;
+ private File dir, configDir;
+ private static File dataFile;
+
+ public SaveLoad(String configFileName) {
+ this.configFileName = configFileName;
+ dir = new File(Minecraft.getMinecraft().mcDataDir, "this.folder.is.useless.but.the.game.crashes.without.it");
+ configDir = new File(dir, "Configs");
+ if(!dir.exists()) {
+ dir.mkdir();
+ }
+ if(!configDir.exists()) {
+ configDir.mkdir();
+ }
+ dataFile = new File(configDir, configFileName + ".txt");
+ if(!dataFile.exists()) {
+ try {
+ dataFile.createNewFile();
+ } catch (IOException e) {e.printStackTrace();}
+ }
+
+ this.load();
+ }
+
+ public static void save() {
+ ArrayList toSave = new ArrayList();
+
+ for(HudMod mod : NightSky.INSTANCE.hudManager.hudMods) {
+ toSave.add("module:" + mod.getName() + ":" + mod.isEnabled() + ":" + mod.getY() + ":" + mod.getX());
+ }
+
+ for(HudMod mod : NightSky.INSTANCE.hudManager.hudMods) {
+ for(Setting setting : mod.settings) {
+
+ if(setting instanceof BooleanSetting) {
+ BooleanSetting bool = (BooleanSetting) setting;
+ toSave.add("setting:" + mod.name + ":" + setting.name + ":" + bool.isEnabled());
+ }
+
+ if(setting instanceof NumberSetting) {
+ NumberSetting numb = (NumberSetting) setting;
+ toSave.add("setting:" + mod.name + ":" + setting.name + ":" + numb.getValue());
+ }
+
+ if(setting instanceof ModeSetting) {
+ ModeSetting mode = (ModeSetting) setting;
+
+ try {
+ toSave.add("setting:" + mod.name + ":" + setting.name + ":" + mode.getMode());
+ } catch(ArrayIndexOutOfBoundsException e) {
+ NightSky.sendMessage("Invalid mode");
+ NightSky.sendMessage("Could either be an old config, or someone wanted your game to crash.");
+ }
+ }
+ }
+ }
+ toSave.add("COMMANDPREFIX:" + ".");
+
+ try {
+ PrintWriter pw = new PrintWriter(dataFile);
+ for(String str : toSave) {
+ pw.println(str);
+ }
+ pw.close();
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void load() {
+ ArrayList lines = new ArrayList();
+
+ try {
+ BufferedReader reader = new BufferedReader(new FileReader(dataFile));
+ String line = reader.readLine();
+ while(line != null) {
+ lines.add(line);
+ line = reader.readLine();
+ }
+ reader.close();
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ for(String s : lines) {
+ String[] args = s.split(":");
+ if(s.toLowerCase().startsWith("module:")) {
+ HudMod m = NightSky.INSTANCE.hudManager.getModule(args[3]);
+ if(m != null) {
+ if(m.name.equals("ClickGUI") && m.name.equals("hudEditor"))
+ m.setEnabledSilent(!Boolean.parseBoolean(args[4]));
+
+ if(!m.name.equals("ClickGUI") && !m.name.equals("hudEditor"))
+ m.setEnabledSilent(Boolean.parseBoolean(args[4]));
+ //m.setKey(Integer.parseInt(args[3]));
+ }
+ }else if(s.toLowerCase().startsWith("setting:")) {
+ HudMod m = NightSky.INSTANCE.hudManager.getModule(args[1]);
+ if(m != null) {
+ for(Setting setting : m.settings) {
+ if(setting.name.equalsIgnoreCase(args[2]) && setting != null) {
+ if(setting instanceof BooleanSetting) {
+ ((BooleanSetting) setting).setEnabled(Boolean.parseBoolean(args[3]));
+ }
+ if(setting instanceof NumberSetting) {
+ try {
+ ((NumberSetting)setting).setValue(Double.parseDouble(args[3]));
+ } catch(ArrayIndexOutOfBoundsException e) {
+ NightSky.sendMessage("Invalid amount " + args[3]);
+ NightSky.sendMessage("Could either be an old config, or someone wanted your game to crash.");
+ }
+ }
+ if(setting instanceof ModeSetting) {
+ //System.out.println(args[3]);
+ try {
+ //((ModeSetting) setting).setMode(args[3]); AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ } catch(ArrayIndexOutOfBoundsException e) {
+ NightSky.sendMessage("Invalid mode " + args[3]);
+ NightSky.sendMessage("Could either be an old config, or someone wanted your game to crash.");
+ }
+ }
+ }
+ }
+ }
+ }else if(s.toLowerCase().startsWith("commandprefix:")) {
+ //NightSky.INSTANCE.commandManager.setPrefix(args[1]);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/util/cosmetic/AnimUtil.java b/src/minecraft/animeware/util/cosmetic/AnimUtil.java
new file mode 100644
index 0000000..ba9fee8
--- /dev/null
+++ b/src/minecraft/animeware/util/cosmetic/AnimUtil.java
@@ -0,0 +1,51 @@
+package animeware.util.cosmetic;
+
+import animeware.NightSky;
+import animeware.event.EventTarget;
+import animeware.event.impl.EventUpdate;
+import net.minecraft.client.Minecraft;
+import net.minecraft.util.Util;
+
+public class AnimUtil {
+
+ public Minecraft mc = Minecraft.getMinecraft();
+
+ private static String folder;
+ private static String fileType;
+ public static int timer;
+ public static int frames;
+
+
+ @EventTarget
+ public static void anim(EventUpdate e) {
+ Minecraft mc = Minecraft.getMinecraft();
+ int maxFrames = 15;
+ if(mc.thePlayer != null && mc.theWorld != null) {
+ timer++;
+ //System.out.println(timer);
+ if(timer > 1) {
+ timer = 0;
+ }
+ if(timer == 0) {
+ frames++;
+ }
+ if(frames > maxFrames) {
+ frames = 0;
+ }
+ if(frames == 0) {
+ //System.out.println("its 0");
+ }
+
+ //MotionBlur.createAccumulation();
+ //SocketClient.main(null);
+ /*System.out.println(SocketClient.client.request("start_animeware", Minecraft.getMinecraft().thePlayer.getGameProfile().getName() + ":true"));
+ System.out.println(SocketClient.client.request("start_animeware", Minecraft.getMinecraft().thePlayer.getGameProfile().getName() + ":trueowner"));
+ System.out.println(SocketClient.client.request("start_animeware", Minecraft.getMinecraft().thePlayer.getGameProfile().getName() + ":truedev"));
+ System.out.println(SocketClient.client.request("start_animeware", Minecraft.getMinecraft().thePlayer.getGameProfile().getName() + ":truepurple"));*/
+ //hasSent = true;
+ }
+
+ }
+
+
+}
diff --git a/src/minecraft/animeware/util/file/FileUtils.java b/src/minecraft/animeware/util/file/FileUtils.java
new file mode 100644
index 0000000..ef1772a
--- /dev/null
+++ b/src/minecraft/animeware/util/file/FileUtils.java
@@ -0,0 +1,39 @@
+package animeware.util.file;
+
+import java.io.*;
+
+public class FileUtils {
+
+ public static String readFile(File file) {
+ StringBuilder stringBuilder = new StringBuilder();
+
+ try {
+ FileInputStream fileInputStream = new FileInputStream(file);
+ try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream))) {
+ String line;
+ while ((line = bufferedReader.readLine()) != null)
+ stringBuilder.append(line).append('\n');
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return stringBuilder.toString();
+ }
+
+ public static String readInputStream(InputStream inputStream) {
+ StringBuilder stringBuilder = new StringBuilder();
+
+ try {
+ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+ String line;
+ while ((line = bufferedReader.readLine()) != null)
+ stringBuilder.append(line).append('\n');
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return stringBuilder.toString();
+ }
+
+}
diff --git a/src/minecraft/animeware/util/file/NightSkyAssets.java b/src/minecraft/animeware/util/file/NightSkyAssets.java
new file mode 100644
index 0000000..a8a55d5
--- /dev/null
+++ b/src/minecraft/animeware/util/file/NightSkyAssets.java
@@ -0,0 +1,18 @@
+package animeware.util.file;
+
+public class NightSkyAssets {
+
+ public static String getNightSkyAssets() {
+ return "Animeware/";
+ }
+ public static String getNightSkyIcons() {
+ return "Animeware/icons";
+ }
+ public static String getNightSkyCosmetics() {
+ return "Animeware/cosmetic";
+ }
+ public static String getNightSkyCapes() {
+ return "Animeware/cosmetic/capes";
+ }
+
+}
diff --git a/src/minecraft/animeware/util/font/CFont$CharData.java b/src/minecraft/animeware/util/font/CFont$CharData.java
new file mode 100644
index 0000000..983ddbe
--- /dev/null
+++ b/src/minecraft/animeware/util/font/CFont$CharData.java
@@ -0,0 +1,13 @@
+// Decompiled with: CFR 0.152
+// Class Version: 8
+package animeware.util.font;
+
+class CFont$CharData {
+ public int width;
+ public int height;
+ public int storedX;
+ public int storedY;
+
+ protected CFont$CharData() {
+ }
+}
diff --git a/src/minecraft/animeware/util/font/CFont.java b/src/minecraft/animeware/util/font/CFont.java
new file mode 100644
index 0000000..b62fd84
--- /dev/null
+++ b/src/minecraft/animeware/util/font/CFont.java
@@ -0,0 +1,145 @@
+// Decompiled with: CFR 0.152
+// Class Version: 8
+package animeware.util.font;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import net.minecraft.client.renderer.texture.DynamicTexture;
+import org.lwjgl.opengl.GL11;
+
+public class CFont {
+ float imgSize = 512.0f;
+ CharData[] charData = new CharData[256];
+ Font font;
+ boolean antiAlias;
+ boolean fractionalMetrics;
+ int fontHeight = -1;
+ int charOffset = 0;
+ DynamicTexture tex;
+
+ public CFont(Font font, boolean antiAlias, boolean fractionalMetrics) {
+ this.font = font;
+ this.antiAlias = antiAlias;
+ this.fractionalMetrics = fractionalMetrics;
+ this.tex = this.setupTexture(font, antiAlias, fractionalMetrics, this.charData);
+ }
+
+ protected DynamicTexture setupTexture(Font font, boolean antiAlias, boolean fractionalMetrics, CharData[] chars) {
+ BufferedImage img = this.generateFontImage(font, antiAlias, fractionalMetrics, chars);
+ try {
+ return new DynamicTexture(img);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ protected BufferedImage generateFontImage(Font font, boolean antiAlias, boolean fractionalMetrics, CharData[] chars) {
+ int imgSize = (int)this.imgSize;
+ BufferedImage bufferedImage = new BufferedImage(imgSize, imgSize, 2);
+ Graphics2D graphics = (Graphics2D)bufferedImage.getGraphics();
+ graphics.setFont(font);
+ graphics.setColor(new Color(255, 255, 255, 0));
+ graphics.fillRect(0, 0, imgSize, imgSize);
+ graphics.setColor(Color.WHITE);
+ graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, fractionalMetrics ? RenderingHints.VALUE_FRACTIONALMETRICS_ON : RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
+ graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, antiAlias ? RenderingHints.VALUE_TEXT_ANTIALIAS_ON : RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
+ graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, antiAlias ? RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF);
+ FontMetrics fontMetrics = graphics.getFontMetrics();
+ int charHeight = 0;
+ int positionX = 0;
+ int positionY = 1;
+ int index = 0;
+ while (index < chars.length) {
+ char c = (char)index;
+ CharData charData = new CharData();
+ Rectangle2D dimensions = fontMetrics.getStringBounds(String.valueOf(c), graphics);
+ charData.width = dimensions.getBounds().width + 8;
+ charData.height = dimensions.getBounds().height;
+ if (positionX + charData.width >= imgSize) {
+ positionX = 0;
+ positionY += charHeight;
+ charHeight = 0;
+ }
+ if (charData.height > charHeight) {
+ charHeight = charData.height;
+ }
+ charData.storedX = positionX;
+ charData.storedY = positionY;
+ if (charData.height > this.fontHeight) {
+ this.fontHeight = charData.height;
+ }
+ chars[index] = charData;
+ graphics.drawString(String.valueOf(c), positionX + 2, positionY + fontMetrics.getAscent());
+ positionX += charData.width;
+ ++index;
+ }
+ return bufferedImage;
+ }
+
+ public void drawChar(CharData[] chars, char c, float x, float y) throws ArrayIndexOutOfBoundsException {
+ try {
+ this.drawQuad(x, y, chars[c].width, chars[c].height, chars[c].storedX, chars[c].storedY, chars[c].width, chars[c].height);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ protected void drawQuad(float x2, float y2, float width, float height, float srcX, float srcY, float srcWidth, float srcHeight) {
+ float renderSRCX = srcX / this.imgSize;
+ float renderSRCY = srcY / this.imgSize;
+ float renderSRCWidth = srcWidth / this.imgSize;
+ float renderSRCHeight = srcHeight / this.imgSize;
+ GL11.glTexCoord2f(renderSRCX + renderSRCWidth, renderSRCY);
+ GL11.glVertex2d(x2 + width, y2);
+ GL11.glTexCoord2f(renderSRCX, renderSRCY);
+ GL11.glVertex2d(x2, y2);
+ GL11.glTexCoord2f(renderSRCX, renderSRCY + renderSRCHeight);
+ GL11.glVertex2d(x2, y2 + height);
+ GL11.glTexCoord2f(renderSRCX, renderSRCY + renderSRCHeight);
+ GL11.glVertex2d(x2, y2 + height);
+ GL11.glTexCoord2f(renderSRCX + renderSRCWidth, renderSRCY + renderSRCHeight);
+ GL11.glVertex2d(x2 + width, y2 + height);
+ GL11.glTexCoord2f(renderSRCX + renderSRCWidth, renderSRCY);
+ GL11.glVertex2d(x2 + width, y2);
+ }
+
+ public void setAntiAlias(boolean antiAlias) {
+ if (this.antiAlias != antiAlias) {
+ this.antiAlias = antiAlias;
+ this.tex = this.setupTexture(this.font, antiAlias, this.fractionalMetrics, this.charData);
+ }
+ }
+
+ public boolean isFractionalMetrics() {
+ return this.fractionalMetrics;
+ }
+
+ public void setFractionalMetrics(boolean fractionalMetrics) {
+ if (this.fractionalMetrics != fractionalMetrics) {
+ this.fractionalMetrics = fractionalMetrics;
+ this.tex = this.setupTexture(this.font, this.antiAlias, fractionalMetrics, this.charData);
+ }
+ }
+
+ public void setFont(Font font) {
+ this.font = font;
+ this.tex = this.setupTexture(font, this.antiAlias, this.fractionalMetrics, this.charData);
+ }
+
+ protected static class CharData {
+ public int width;
+ public int height;
+ public int storedX;
+ public int storedY;
+
+
+ }
+}
diff --git a/src/minecraft/animeware/util/font/FontUtil.java b/src/minecraft/animeware/util/font/FontUtil.java
new file mode 100644
index 0000000..abe3b9a
--- /dev/null
+++ b/src/minecraft/animeware/util/font/FontUtil.java
@@ -0,0 +1,158 @@
+// Decompiled with: CFR 0.152
+// Class Version: 8
+package animeware.util.font;
+
+import java.awt.Font;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import net.minecraft.client.Minecraft;
+import net.minecraft.util.ResourceLocation;
+
+public class FontUtil {
+ public static volatile int completed;
+ public static MinecraftFontRenderer normal;
+ private static Font normal_;
+
+ private static Font getFont(Map locationMap, String location, int size) {
+ Font font = null;
+ try {
+ if (locationMap.containsKey(location)) {
+ font = locationMap.get(location).deriveFont(0, size);
+ } else {
+ InputStream is = Minecraft.getMinecraft().getResourceManager().getResource(new ResourceLocation("Animeware/font/" + location)).getInputStream();
+ font = Font.createFont(0, is);
+ locationMap.put(location, font);
+ font = font.deriveFont(0, size);
+ }
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ System.out.println("Error loading font");
+ font = new Font("default", 0, 10);
+ }
+ return font;
+ }
+
+ public static boolean hasLoaded() {
+ return completed >= 3;
+ }
+
+ public static void bootstrap() {
+ new Thread(() -> {
+ HashMap locationMap = new HashMap();
+ normal_ = FontUtil.getFont(locationMap, "font.ttf", 19);
+ ++completed;
+ }).start();
+ new Thread(() -> {
+ HashMap locationMap = new HashMap();
+ ++completed;
+ }).start();
+ new Thread(() -> {
+ HashMap locationMap = new HashMap();
+ ++completed;
+ }).start();
+ while (!FontUtil.hasLoaded()) {
+ try {
+ Thread.sleep(5L);
+ }
+ catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ normal = new MinecraftFontRenderer(normal_, true, true);
+ }
+}
+
+/*package animeware.util.font;
+
+
+import java.awt.Font;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.util.ResourceLocation;
+
+@SuppressWarnings("NonAtomicOperationOnVolatileField")
+public class FontUtil {
+ public static volatile int completed;
+ public static MinecraftFontRenderer normal, tenacity;
+ public static Font normal_;
+
+ private static Font getFont(Map locationMap, String location, int size) {
+ Font font = null;
+
+ try {
+ if (locationMap.containsKey(location)) {
+ font = locationMap.get(location).deriveFont(Font.PLAIN, size);
+ } else {
+ InputStream is = Minecraft.getMinecraft().getResourceManager()
+ .getResource(new ResourceLocation("Animeware/font/" + location)).getInputStream();
+ font = Font.createFont(0, is);
+ locationMap.put(location, font);
+ font = font.deriveFont(Font.PLAIN, size);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.out.println("Error loading font");
+ font = new Font("default", Font.PLAIN, +15);
+ }
+
+ return font;
+ }
+ public static Font getFontTena(Map locationMap, String location, int size) {
+ Font font;
+ try {
+ if (locationMap.containsKey(location)) {
+ font = locationMap.get(location).deriveFont(Font.PLAIN, size);
+ } else {
+ InputStream is = Minecraft.getMinecraft().getResourceManager()
+ .getResource(new ResourceLocation("Animeware/fonts/" + location)).getInputStream();
+ locationMap.put(location, font = Font.createFont(0, is));
+ font = font.deriveFont(Font.PLAIN, size);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.out.println("Error loading font");
+ font = new Font("default", Font.PLAIN, +10);
+ }
+ return font;
+ }
+
+ public static boolean hasLoaded() {
+ return completed >= 3;
+ }
+
+ public static void bootstrap() {
+ new Thread(() ->
+ {
+ Map locationMap = new HashMap<>();
+ normal_ = getFont(locationMap, "font.ttf", 19);
+ //normal_ = getFont(locationMap, "thic.ttf", 19);
+ completed++;
+ }).start();
+ new Thread(() ->
+ {
+ Map locationMap = new HashMap<>();
+ completed++;
+ }).start();
+ new Thread(() ->
+ {
+ Map locationMap = new HashMap<>();
+ completed++;
+ }).start();
+
+ while (!hasLoaded()) {
+ try {
+ //noinspection BusyWait
+ Thread.sleep(5);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ normal = new MinecraftFontRenderer(normal_, true, true);
+ }
+}*/
\ No newline at end of file
diff --git a/src/minecraft/animeware/util/font/FontUtilCedo.java b/src/minecraft/animeware/util/font/FontUtilCedo.java
new file mode 100644
index 0000000..2bf3216
--- /dev/null
+++ b/src/minecraft/animeware/util/font/FontUtilCedo.java
@@ -0,0 +1,74 @@
+package animeware.util.font;
+
+
+import java.awt.Font;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.util.ResourceLocation;
+
+@SuppressWarnings("NonAtomicOperationOnVolatileField")
+public class FontUtilCedo {
+ public static volatile int completed;
+ public static MinecraftFontRenderer normal;
+ public static Font normal_;
+
+ private static Font getFont(Map locationMap, String location, int size) {
+ Font font = null;
+
+ try {
+ if (locationMap.containsKey(location)) {
+ font = locationMap.get(location).deriveFont(Font.PLAIN, size);
+ } else {
+ InputStream is = Minecraft.getMinecraft().getResourceManager()
+ .getResource(new ResourceLocation("Animeware/font/" + location)).getInputStream();
+ font = Font.createFont(0, is);
+ locationMap.put(location, font);
+ font = font.deriveFont(Font.PLAIN, size);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.out.println("Error loading font");
+ font = new Font("default", Font.PLAIN, +15);
+ }
+
+ return font;
+ }
+
+ public static boolean hasLoaded() {
+ return completed >= 3;
+ }
+
+ public static void bootstrap() {
+ new Thread(() ->
+ {
+ Map locationMap = new HashMap<>();
+ normal_ = getFont(locationMap, "cedo.ttf", 19);
+ //normal_ = getFont(locationMap, "thic.ttf", 19);
+ completed++;
+ }).start();
+ new Thread(() ->
+ {
+ Map locationMap = new HashMap<>();
+ completed++;
+ }).start();
+ new Thread(() ->
+ {
+ Map locationMap = new HashMap<>();
+ completed++;
+ }).start();
+
+ while (!hasLoaded()) {
+ try {
+ //noinspection BusyWait
+ Thread.sleep(5);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ normal = new MinecraftFontRenderer(normal_, true, true);
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/util/font/FontUtilIcon.java b/src/minecraft/animeware/util/font/FontUtilIcon.java
new file mode 100644
index 0000000..5132468
--- /dev/null
+++ b/src/minecraft/animeware/util/font/FontUtilIcon.java
@@ -0,0 +1,74 @@
+package animeware.util.font;
+
+
+import java.awt.Font;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.util.ResourceLocation;
+
+@SuppressWarnings("NonAtomicOperationOnVolatileField")
+public class FontUtilIcon {
+ public static volatile int completed;
+ public static MinecraftFontRenderer normal;
+ public static Font normal_;
+
+ private static Font getFont(Map locationMap, String location, int size) {
+ Font font = null;
+
+ try {
+ if (locationMap.containsKey(location)) {
+ font = locationMap.get(location).deriveFont(Font.PLAIN, size);
+ } else {
+ InputStream is = Minecraft.getMinecraft().getResourceManager()
+ .getResource(new ResourceLocation("Animeware/font/" + location)).getInputStream();
+ font = Font.createFont(0, is);
+ locationMap.put(location, font);
+ font = font.deriveFont(Font.PLAIN, size);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.out.println("Error loading font");
+ font = new Font("default", Font.PLAIN, +15);
+ }
+
+ return font;
+ }
+
+ public static boolean hasLoaded() {
+ return completed >= 3;
+ }
+
+ public static void bootstrap() {
+ new Thread(() ->
+ {
+ Map locationMap = new HashMap<>();
+ normal_ = getFont(locationMap, "font.ttf", 19);
+ //normal_ = getFont(locationMap, "thic.ttf", 19);
+ completed++;
+ }).start();
+ new Thread(() ->
+ {
+ Map locationMap = new HashMap<>();
+ completed++;
+ }).start();
+ new Thread(() ->
+ {
+ Map locationMap = new HashMap<>();
+ completed++;
+ }).start();
+
+ while (!hasLoaded()) {
+ try {
+ //noinspection BusyWait
+ Thread.sleep(5);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ normal = new MinecraftFontRenderer(normal_, true, true);
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/util/font/JCFont/FontAtacher.java b/src/minecraft/animeware/util/font/JCFont/FontAtacher.java
new file mode 100644
index 0000000..686b2d6
--- /dev/null
+++ b/src/minecraft/animeware/util/font/JCFont/FontAtacher.java
@@ -0,0 +1,240 @@
+package animeware.util.font.JCFont;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.image.BufferedImage;
+import java.awt.image.ImageObserver;
+import net.minecraft.client.renderer.texture.TextureUtil;
+import org.lwjgl.opengl.GL11;
+
+public class FontAtacher {
+ public int IMAGE_WIDTH = 1024;
+
+ public int IMAGE_HEIGHT = 1024;
+
+ private int texID;
+
+ private final IntObject[] chars = new IntObject[2048];
+
+ private final Font font;
+
+ private boolean antiAlias;
+
+ private int fontHeight = -1;
+
+ private int charOffset = 8;
+
+ public FontAtacher(Font font, boolean antiAlias, int charOffset) {
+ this.font = font;
+ this.antiAlias = antiAlias;
+ this.charOffset = charOffset;
+ setupTexture(antiAlias);
+ }
+
+ public FontAtacher(Font font, boolean antiAlias) {
+ this.font = font;
+ this.antiAlias = antiAlias;
+ this.charOffset = 8;
+ setupTexture(antiAlias);
+ }
+
+ private void setupTexture(boolean antiAlias) {
+ if (this.font.getSize() <= 15) {
+ this.IMAGE_WIDTH = 256;
+ this.IMAGE_HEIGHT = 256;
+ }
+ if (this.font.getSize() <= 43) {
+ this.IMAGE_WIDTH = 512;
+ this.IMAGE_HEIGHT = 512;
+ } else if (this.font.getSize() <= 91) {
+ this.IMAGE_WIDTH = 1024;
+ this.IMAGE_HEIGHT = 1024;
+ } else {
+ this.IMAGE_WIDTH = 2048;
+ this.IMAGE_HEIGHT = 2048;
+ }
+ BufferedImage img = new BufferedImage(this.IMAGE_WIDTH, this.IMAGE_HEIGHT, 2);
+ Graphics2D g = (Graphics2D)img.getGraphics();
+ g.setFont(this.font);
+ g.setColor(new Color(255, 255, 255, 0));
+ g.fillRect(0, 0, this.IMAGE_WIDTH, this.IMAGE_HEIGHT);
+ g.setColor(Color.white);
+ int rowHeight = 0;
+ int positionX = 0;
+ int positionY = 0;
+ for (int i = 0; i < 2048; i++) {
+ char ch = (char)i;
+ BufferedImage fontImage = getFontImage(ch, antiAlias);
+ IntObject newIntObject = new IntObject(null);
+ newIntObject.width = fontImage.getWidth();
+ newIntObject.height = fontImage.getHeight();
+ if (positionX + newIntObject.width >= this.IMAGE_WIDTH) {
+ positionX = 0;
+ positionY += rowHeight;
+ rowHeight = 0;
+ }
+ newIntObject.storedX = positionX;
+ newIntObject.storedY = positionY;
+ if (newIntObject.height > this.fontHeight)
+ this.fontHeight = newIntObject.height;
+ if (newIntObject.height > rowHeight)
+ rowHeight = newIntObject.height;
+ this.chars[i] = newIntObject;
+ g.drawImage(fontImage, positionX, positionY, (ImageObserver)null);
+ positionX += newIntObject.width;
+ }
+ try {
+ this.texID = TextureUtil.uploadTextureImageAllocate(TextureUtil.glGenTextures(), img, true, true);
+ } catch (NullPointerException var11) {
+ var11.printStackTrace();
+ }
+ }
+
+ private BufferedImage getFontImage(char ch, boolean antiAlias) {
+ BufferedImage tempfontImage = new BufferedImage(1, 1, 2);
+ Graphics2D g = (Graphics2D)tempfontImage.getGraphics();
+ if (antiAlias) {
+ g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+ } else {
+ g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
+ }
+ g.setFont(this.font);
+ FontMetrics fontMetrics = g.getFontMetrics();
+ int charwidth = fontMetrics.charWidth(ch) + 8;
+ if (charwidth <= 0)
+ charwidth = 7;
+ int charheight = fontMetrics.getHeight() + 3;
+ if (charheight <= 0)
+ charheight = this.font.getSize();
+ BufferedImage fontImage = new BufferedImage(charwidth, charheight, 2);
+ Graphics2D gt = (Graphics2D)fontImage.getGraphics();
+ if (antiAlias) {
+ gt.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+ } else {
+ gt.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
+ }
+ gt.setFont(this.font);
+ gt.setColor(Color.WHITE);
+ int charx = 3;
+ int chary = 1;
+ gt.drawString(String.valueOf(ch), 3, 1 + fontMetrics.getAscent());
+ return fontImage;
+ }
+
+ public void drawChar(char c, float x, float y) throws ArrayIndexOutOfBoundsException {
+ try {
+ drawQuad(x, y, (this.chars[c]).width, (this.chars[c]).height, (this.chars[c]).storedX, (this.chars[c]).storedY, (this.chars[c]).width, (this.chars[c]).height);
+ } catch (Exception var5) {
+ var5.printStackTrace();
+ }
+ }
+
+ private void drawQuad(float x, float y, float width, float height, float srcX, float srcY, float srcWidth, float srcHeight) {
+ float renderSRCX = srcX / this.IMAGE_WIDTH;
+ float renderSRCY = srcY / this.IMAGE_HEIGHT;
+ float renderSRCWidth = srcWidth / this.IMAGE_WIDTH;
+ float renderSRCHeight = srcHeight / this.IMAGE_HEIGHT;
+ GL11.glBegin(4);
+ GL11.glTexCoord2f(renderSRCX + renderSRCWidth, renderSRCY);
+ GL11.glVertex2d((x + width), y);
+ GL11.glTexCoord2f(renderSRCX, renderSRCY);
+ GL11.glVertex2d(x, y);
+ GL11.glTexCoord2f(renderSRCX, renderSRCY + renderSRCHeight);
+ GL11.glVertex2d(x, (y + height));
+ GL11.glTexCoord2f(renderSRCX, renderSRCY + renderSRCHeight);
+ GL11.glVertex2d(x, (y + height));
+ GL11.glTexCoord2f(renderSRCX + renderSRCWidth, renderSRCY + renderSRCHeight);
+ GL11.glVertex2d((x + width), (y + height));
+ GL11.glTexCoord2f(renderSRCX + renderSRCWidth, renderSRCY);
+ GL11.glVertex2d((x + width), y);
+ GL11.glEnd();
+ }
+
+ public void drawString(String text, double x, double y, Color color, boolean shadow) {
+ x *= 2.0D;
+ y = y * 2.0D - 6.0D;
+ GL11.glPushMatrix();
+ GL11.glScaled(0.5D, 0.5D, 0.5D);
+ TextureUtil.bindTexture(this.texID);
+ glColor(shadow ? new Color(0.05F, 0.05F, 0.05F, color.getAlpha() / 255.0F) : color);
+ int size = text.length();
+ for (int indexInString = 0; indexInString < size; indexInString++) {
+ char character = text.charAt(indexInString);
+ if (character < this.chars.length && character >= '\000') {
+ drawChar(character, (float)x, (float)y);
+ x += ((this.chars[character]).width - this.charOffset);
+ }
+ }
+ GL11.glPopMatrix();
+ }
+
+ public void glColor(Color color) {
+ float red = color.getRed() / 255.0F;
+ float green = color.getGreen() / 255.0F;
+ float blue = color.getBlue() / 255.0F;
+ float alpha = color.getAlpha() / 255.0F;
+ GL11.glColor4f(red, green, blue, alpha);
+ }
+
+ public int getStringHeight(String text) {
+ int lines = 1;
+ char[] var6;
+ int var5 = (var6 = text.toCharArray()).length;
+ for (int var4 = 0; var4 < var5; var4++) {
+ char c = var6[var4];
+ if (c == '\n')
+ lines++;
+ }
+ return (this.fontHeight - this.charOffset) / 2 * lines;
+ }
+
+ public int getHeight() {
+ return (this.fontHeight - this.charOffset) / 2;
+ }
+
+ public int getStringWidth(String text) {
+ int width = 0;
+ char[] var6;
+ int var5 = (var6 = text.toCharArray()).length;
+ for (int var4 = 0; var4 < var5; var4++) {
+ char c = var6[var4];
+ if (c < this.chars.length && c >= '\000')
+ width += (this.chars[c]).width - this.charOffset;
+ }
+ return width / 2;
+ }
+
+ public boolean isAntiAlias() {
+ return this.antiAlias;
+ }
+
+ public void setAntiAlias(boolean antiAlias) {
+ if (this.antiAlias != antiAlias) {
+ this.antiAlias = antiAlias;
+ setupTexture(antiAlias);
+ }
+ }
+
+ public Font getFont() {
+ return this.font;
+ }
+
+ private class IntObject {
+ public int width;
+
+ public int height;
+
+ public int storedX;
+
+ public int storedY;
+
+ private IntObject() {}
+
+ IntObject(IntObject var2) {
+ this();
+ }
+ }
+}
diff --git a/src/minecraft/animeware/util/font/JCFont/Fonts.java b/src/minecraft/animeware/util/font/JCFont/Fonts.java
new file mode 100644
index 0000000..9b20f1d
--- /dev/null
+++ b/src/minecraft/animeware/util/font/JCFont/Fonts.java
@@ -0,0 +1,26 @@
+package animeware.util.font.JCFont;
+
+import java.awt.Font;
+import java.io.InputStream;
+import net.minecraft.client.Minecraft;
+import net.minecraft.util.ResourceLocation;
+
+public class Fonts {
+ public static Font getFont(int size, String l) {
+ Font font = null;
+ try {
+ InputStream ex = Minecraft.getMinecraft().getResourceManager().getResource(new ResourceLocation("Animeware/font/" + l + ".ttf")).getInputStream();
+ font = Font.createFont(0, ex);
+ font = font.deriveFont(0, size);
+ } catch (Exception var3) {
+ var3.printStackTrace();
+ System.err.println("Font not loaded. Using serif font.");
+ font = new Font("default", 0, size);
+ }
+ return font;
+ }
+
+ public static cFontRenderer getCustomeFont(int size, String l) {
+ return new cFontRenderer(getFont(size, l), true, 8);
+ }
+}
diff --git a/src/minecraft/animeware/util/font/JCFont/cFontRenderer.java b/src/minecraft/animeware/util/font/JCFont/cFontRenderer.java
new file mode 100644
index 0000000..d4f14d3
--- /dev/null
+++ b/src/minecraft/animeware/util/font/JCFont/cFontRenderer.java
@@ -0,0 +1,605 @@
+/* */ package animeware.util.font.JCFont;
+/* */
+/* */ import java.awt.Color;
+/* */ import java.awt.Font;
+/* */ import java.util.ArrayList;
+/* */ import java.util.Arrays;
+/* */ import java.util.Iterator;
+/* */ import java.util.List;
+/* */ import java.util.Random;
+
+/* */ import org.lwjgl.opengl.GL11;
+
+/* */ import net.minecraft.client.Minecraft;
+/* */ import net.minecraft.client.gui.FontRenderer;
+/* */ import net.minecraft.client.renderer.GlStateManager;
+/* */ import net.minecraft.client.resources.IResourceManager;
+/* */ import net.minecraft.util.ChatAllowedCharacters;
+/* */ import net.minecraft.util.ResourceLocation;
+/* */
+/* */ public class cFontRenderer extends FontRenderer {
+/* */ public final Random fontRandom;
+/* */ private final Color[] customColorCodes;
+/* */ private final int[] colorCode;
+/* */ private FontAtacher font;
+/* */ private FontAtacher boldFont;
+/* */ private FontAtacher italicFont;
+/* */ private FontAtacher boldItalicFont;
+/* */ private String colorcodeIdentifiers;
+/* 27 */ public static Minecraft mc = Minecraft.getMinecraft();
+/* */ private boolean bidi;
+/* */
+/* */ public cFontRenderer(Font font, boolean antiAlias, int charOffset) {
+/* 31 */ super(mc.gameSettings, new ResourceLocation("textures/font/ascii.png"), Minecraft.getMinecraft().getTextureManager(), false);
+/* 32 */ this.fontRandom = new Random();
+/* 33 */ this.customColorCodes = new Color[256];
+/* 34 */ this.colorCode = new int[32];
+/* 35 */ this.colorcodeIdentifiers = "0123456789abcdefklmnor";
+/* 36 */ setFont(font, antiAlias, charOffset);
+/* 37 */ this.customColorCodes[113] = new Color(0, 90, 163);
+/* 38 */ this.colorcodeIdentifiers = setupColorcodeIdentifier();
+/* 39 */ setupMinecraftColorcodes();
+/* 40 */ this.FONT_HEIGHT = (int)getHeight();
+/* */ }
+/* */
+/* */ public int drawString(String s, float x, float y, int color) {
+/* 44 */ drawString(s, x, y, color, false);
+/* 45 */ return drawString(s, x, y, color, false) + 1;
+/* */ }
+/* */
+/* */ public void drawCenteredStringXY(String s, float x, float y, int color, boolean shadow) {
+/* 49 */ drawCenteredString(s, x, y - getHeight() / 2.0F, color, shadow);
+/* */ }
+/* */
+/* */ public int drawStringWithShadow(String s, float x, float y, int color) {
+/* 53 */ drawString(s, x + 1.0F, y + 1.0F, color, true);
+/* 54 */ return drawString(s, x, y, color, false) + 1;
+/* */ }
+/* */
+/* */ public void drawCenteredString(String s, float x, float y, int color, boolean shadow) {
+/* 58 */ if (shadow) {
+/* 59 */ drawStringWithShadow(s, x - (getStringWidth(s) / 2), y, color);
+/* */ } else {
+/* 61 */ drawString(s, x - (getStringWidth(s) / 2), y, color);
+/* */ }
+/* */ }
+/* */
+/* */ public void drawCenteredString(String s, double d, double e, int color) {
+/* 66 */ drawStringWithShadow(s, (float)(d - (getStringWidth(s) / 2)), (float)e, color);
+/* */ }
+/* */
+/* */ public int func_175063_a(String message, float posX, float posY, int textColor) {
+/* 70 */ return drawStringWithShadow(message, posX, posY, textColor);
+/* */ }
+/* */
+/* */ public int drawString(String text, float x, float y, int color, boolean shadow) {
+/* 74 */ int result = 0;
+/* 75 */ String[] lines = text.split("\n");
+/* */
+/* 77 */ for (int i = 0; i < lines.length; i++) {
+/* 78 */ result = drawLine(lines[i], x, y + i * getHeight(), color, shadow);
+/* */ }
+/* */
+/* 81 */ return result;
+/* */ }
+/* */
+/* */ private int drawLine(String text, float x, float y, int color, boolean shadow) {
+/* 85 */ if (text == null) {
+/* 86 */ return 0;
+/* */ }
+/* 88 */ GL11.glPushMatrix();
+/* 89 */ GL11.glTranslated(x - 1.5D, y + 0.5D, 0.0D);
+/* 90 */ boolean wasBlend = GL11.glGetBoolean(3042);
+/* 91 */ GlStateManager.enableAlpha();
+/* 92 */ GL11.glEnable(3042);
+/* 93 */ GL11.glBlendFunc(770, 771);
+/* 94 */ GL11.glEnable(3553);
+/* 95 */ if ((color & 0xFC000000) == 0) {
+/* 96 */ color |= 0xFF000000;
+/* */ }
+/* */
+/* 99 */ if (shadow) {
+/* 100 */ color = (color & 0xFCFCFC) >> 2 | color & 0xFF000000;
+/* */ }
+/* */
+/* 103 */ float red = (color >> 16 & 0xFF) / 255.0F;
+/* 104 */ float green = (color >> 8 & 0xFF) / 255.0F;
+/* 105 */ float blue = (color & 0xFF) / 255.0F;
+/* 106 */ float alpha = (color >> 24 & 0xFF) / 255.0F;
+/* 107 */ Color c = new Color(red, green, blue, alpha);
+/* 108 */ if (text.contains("§")) {
+/* 109 */ String[] parts = text.split("§");
+/* 110 */ Color currentColor = c;
+/* 111 */ FontAtacher currentFont = this.font;
+/* 112 */ int width = 0;
+/* 113 */ boolean randomCase = false;
+/* 114 */ boolean bold = false;
+/* 115 */ boolean italic = false;
+/* 116 */ boolean strikethrough = false;
+/* 117 */ boolean underline = false;
+/* */
+/* 119 */ for (int index = 0; index < parts.length; index++) {
+/* 120 */ if (parts[index].length() > 0) {
+/* 121 */ if (index == 0) {
+/* 122 */ currentFont.drawString(parts[index], width, 0.0D, currentColor, shadow);
+/* 123 */ width += currentFont.getStringWidth(parts[index]);
+/* */ } else {
+/* 125 */ String words = parts[index].substring(1);
+/* 126 */ char type = parts[index].charAt(0);
+/* 127 */ int colorIndex = this.colorcodeIdentifiers.indexOf(type);
+/* 128 */ if (colorIndex != -1) {
+/* 129 */ if (colorIndex < 16) {
+/* 130 */ int colorcode = this.colorCode[colorIndex];
+/* 131 */ currentColor = getColor(colorcode, alpha);
+/* 132 */ bold = false;
+/* 133 */ italic = false;
+/* 134 */ randomCase = false;
+/* 135 */ underline = false;
+/* 136 */ strikethrough = false;
+/* 137 */ } else if (colorIndex == 16) {
+/* 138 */ randomCase = true;
+/* 139 */ } else if (colorIndex == 17) {
+/* 140 */ bold = true;
+/* 141 */ } else if (colorIndex == 18) {
+/* 142 */ strikethrough = true;
+/* 143 */ } else if (colorIndex == 19) {
+/* 144 */ underline = true;
+/* 145 */ } else if (colorIndex == 20) {
+/* 146 */ italic = true;
+/* 147 */ } else if (colorIndex == 21) {
+/* 148 */ bold = false;
+/* 149 */ italic = false;
+/* 150 */ randomCase = false;
+/* 151 */ underline = false;
+/* 152 */ strikethrough = false;
+/* 153 */ currentColor = c;
+/* 154 */ } else if (colorIndex > 21) {
+/* 155 */ Color customColor = this.customColorCodes[type];
+/* 156 */ currentColor = new Color(customColor.getRed() / 255.0F, customColor.getGreen() / 255.0F, customColor.getBlue() / 255.0F, alpha);
+/* */ }
+/* */ }
+/* */
+/* 160 */ if (bold && italic) {
+/* 161 */ this.boldItalicFont.drawString(randomCase ? toRandom(currentFont, words) : words, width, 0.0D, currentColor, shadow);
+/* 162 */ currentFont = this.boldItalicFont;
+/* 163 */ } else if (bold) {
+/* 164 */ this.boldFont.drawString(randomCase ? toRandom(currentFont, words) : words, width, 0.0D, currentColor, shadow);
+/* 165 */ currentFont = this.boldFont;
+/* 166 */ } else if (italic) {
+/* 167 */ this.italicFont.drawString(randomCase ? toRandom(currentFont, words) : words, width, 0.0D, currentColor, shadow);
+/* 168 */ currentFont = this.italicFont;
+/* */ } else {
+/* 170 */ this.font.drawString(randomCase ? toRandom(currentFont, words) : words, width, 0.0D, currentColor, shadow);
+/* 171 */ currentFont = this.font;
+/* */ }
+/* */
+/* 174 */ float u = this.font.getHeight() / 16.0F;
+/* 175 */ int h = currentFont.getStringHeight(words);
+/* 176 */ if (strikethrough) {
+/* 177 */ drawLine(width / 2.0D + 1.0D, (h / 3), (width + currentFont.getStringWidth(words)) / 2.0D + 1.0D, (h / 3), u);
+/* */ }
+/* */
+/* 180 */ if (underline) {
+/* 181 */ drawLine(width / 2.0D + 1.0D, (h / 2), (width + currentFont.getStringWidth(words)) / 2.0D + 1.0D, (h / 2), u);
+/* */ }
+/* */
+/* 184 */ width += currentFont.getStringWidth(words);
+/* */ }
+/* */ }
+/* */ }
+/* */ } else {
+/* 189 */ this.font.drawString(text, 0.0D, 0.0D, c, shadow);
+/* */ }
+/* */
+/* 192 */ if (!wasBlend) {
+/* 193 */ GL11.glDisable(3042);
+/* */ }
+/* */
+/* 196 */ GL11.glPopMatrix();
+/* 197 */ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+/* 198 */ return (int)(x + getStringWidth(text));
+/* */ }
+/* */
+/* */
+/* */ private String toRandom(FontAtacher font, String text) {
+/* 203 */ String newText = "";
+/* 204 */ String allowedCharacters = "ÀÁÂÈÊËÍÓÔÕÚßãõğİıŒœŞşŴŵžȇ\000\000\000\000\000\000\000 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\000ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø׃áíóúñѪº¿®¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αβΓπΣσμτΦΘΩδ∞∅∈∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\000";
+/* */ char[] var8;
+/* 206 */ int var7 = (var8 = text.toCharArray()).length;
+/* */
+/* 208 */ for (int var6 = 0; var6 < var7; var6++) {
+/* 209 */ char c = var8[var6];
+/* 210 */ if (ChatAllowedCharacters.isAllowedCharacter(c)) {
+/* 211 */ int index = this.fontRandom.nextInt("ÀÁÂÈÊËÍÓÔÕÚßãõğİıŒœŞşŴŵžȇ\000\000\000\000\000\000\000 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\000ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø׃áíóúñѪº¿®¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αβΓπΣσμτΦΘΩδ∞∅∈∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\000".length());
+/* 212 */ newText = String.valueOf(String.valueOf(newText)) + "ÀÁÂÈÊËÍÓÔÕÚßãõğİıŒœŞşŴŵžȇ\000\000\000\000\000\000\000 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\000ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø׃áíóúñѪº¿®¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αβΓπΣσμτΦΘΩδ∞∅∈∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\000".toCharArray()[index];
+/* */ }
+/* */ }
+/* 215 */ return newText;
+/* */ }
+/* */
+/* */ public float getStringHeight(String text) {
+/* 219 */ if (text == null) {
+/* 220 */ return 0.0F;
+/* */ }
+/* 222 */ return this.font.getStringHeight(text);
+/* */ }
+/* */
+/* */
+/* */ public float getHeight() {
+/* 227 */ return this.font.getHeight();
+/* */ }
+/* */
+/* */ public static String getFormatFromString(String p_78282_0_) {
+/* 231 */ String var1 = "";
+/* 232 */ int var2 = -1;
+/* 233 */ int var3 = p_78282_0_.length();
+/* */
+/* 235 */ while ((var2 = p_78282_0_.indexOf('§', var2 + 1)) != -1) {
+/* 236 */ if (var2 < var3 - 1) {
+/* 237 */ char var4 = p_78282_0_.charAt(var2 + 1);
+/* 238 */ if (isFormatColor(var4)) {
+/* 239 */ var1 = "§" + var4; continue;
+/* 240 */ } if (isFormatSpecial(var4)) {
+/* 241 */ var1 = String.valueOf(var1) + "§" + var4;
+/* */ }
+/* */ }
+/* */ }
+/* */
+/* 246 */ return var1;
+/* */ }
+/* */
+/* */ private static boolean isFormatSpecial(char formatChar) {
+/* 250 */ return !((formatChar < 'k' || formatChar > 'o') && (formatChar < 'K' || formatChar > 'O') && formatChar != 'r' && formatChar != 'R');
+/* */ }
+/* */
+/* */ public int getColorCode(char p_175064_1_) {
+/* 254 */ return this.colorCode["0123456789abcdef".indexOf(p_175064_1_)];
+/* */ }
+/* */
+/* */ public void setBidiFlag(boolean state) {
+/* 258 */ this.bidi = state;
+/* */ }
+/* */
+/* */ public boolean getBidiFlag() {
+/* 262 */ return this.bidi;
+/* */ }
+/* */
+/* */ private int sizeStringToWidth(String str, int wrapWidth) {
+/* 266 */ int var3 = str.length();
+/* 267 */ int var4 = 0;
+/* 268 */ int var5 = 0;
+/* 269 */ int var6 = -1;
+/* */
+/* 271 */ for (boolean var7 = false; var5 < var3; var5++) {
+/* 272 */ char var8 = str.charAt(var5);
+/* 273 */ switch (var8) {
+/* */ case '\n':
+/* 275 */ var5--;
+/* */ break;
+/* */ case ' ':
+/* 278 */ var6 = var5;
+/* */ default:
+/* 280 */ var4 += getStringWidth(Character.toString(var8));
+/* 281 */ if (var7) {
+/* 282 */ var4++;
+/* */ }
+/* */ break;
+/* */ case '§':
+/* 286 */ if (var5 < var3 - 1) {
+/* 287 */ var5++;
+/* 288 */ char var9 = str.charAt(var5);
+/* 289 */ if (var9 != 'l' && var9 != 'L') {
+/* 290 */ if (var9 == 'r' || var9 == 'R' || isFormatColor(var9))
+/* 291 */ var7 = false;
+/* */ break;
+/* */ }
+/* 294 */ var7 = true;
+/* */ }
+/* */ break;
+/* */ }
+/* */
+/* 299 */ if (var8 == '\n') {
+/* */
+/* 301 */ var6 = ++var5;
+/* */
+/* */ break;
+/* */ }
+/* 305 */ if (var4 > wrapWidth) {
+/* */ break;
+/* */ }
+/* */ }
+/* */
+/* 310 */ return (var5 != var3 && var6 != -1 && var6 < var5) ? var6 : var5;
+/* */ }
+/* */
+/* */ private static boolean isFormatColor(char colorChar) {
+/* 314 */ return !((colorChar < '0' || colorChar > '9') && (colorChar < 'a' || colorChar > 'f') && (colorChar < 'A' || colorChar > 'F'));
+/* */ }
+/* */
+/* */ public int getCharWidth(char c) {
+/* 318 */ return getStringWidth(Character.toString(c));
+/* */ }
+/* */
+/* */ public int getStringWidth(String text) {
+/* 322 */ if (text == null)
+/* 323 */ return 0;
+/* 324 */ if (!text.contains("§")) {
+/* 325 */ return this.font.getStringWidth(text);
+/* */ }
+/* 327 */ String[] parts = text.split("§");
+/* 328 */ FontAtacher currentFont = this.font;
+/* 329 */ int width = 0;
+/* 330 */ boolean bold = false;
+/* 331 */ boolean italic = false;
+/* */
+/* 333 */ for (int index = 0; index < parts.length; index++) {
+/* 334 */ if (parts[index].length() > 0) {
+/* 335 */ if (index == 0) {
+/* 336 */ width += currentFont.getStringWidth(parts[index]);
+/* */ } else {
+/* 338 */ String words = parts[index].substring(1);
+/* 339 */ char type = parts[index].charAt(0);
+/* 340 */ int colorIndex = this.colorcodeIdentifiers.indexOf(type);
+/* 341 */ if (colorIndex != -1) {
+/* 342 */ if (colorIndex < 16) {
+/* 343 */ bold = false;
+/* 344 */ italic = false;
+/* 345 */ } else if (colorIndex != 16) {
+/* 346 */ if (colorIndex == 17) {
+/* 347 */ bold = true;
+/* 348 */ } else if (colorIndex != 18 && colorIndex != 19) {
+/* 349 */ if (colorIndex == 20) {
+/* 350 */ italic = true;
+/* 351 */ } else if (colorIndex == 21) {
+/* 352 */ bold = false;
+/* 353 */ italic = false;
+/* */ }
+/* */ }
+/* */ }
+/* */ }
+/* */
+/* 359 */ if (bold && italic) {
+/* 360 */ currentFont = this.boldItalicFont;
+/* 361 */ } else if (bold) {
+/* 362 */ currentFont = this.boldFont;
+/* 363 */ } else if (italic) {
+/* 364 */ currentFont = this.italicFont;
+/* */ } else {
+/* 366 */ currentFont = this.font;
+/* */ }
+/* */
+/* 369 */ width += currentFont.getStringWidth(words);
+/* */ }
+/* */ }
+/* */ }
+/* */
+/* 374 */ return width;
+/* */ }
+/* */
+/* */
+/* */ public void setFont(Font font, boolean antiAlias, int charOffset) {
+/* 379 */ synchronized (this) {
+/* 380 */ this.font = new FontAtacher(font, antiAlias, charOffset);
+/* 381 */ this.boldFont = new FontAtacher(font.deriveFont(1), antiAlias, charOffset);
+/* 382 */ this.italicFont = new FontAtacher(font.deriveFont(2), antiAlias, charOffset);
+/* 383 */ this.boldItalicFont = new FontAtacher(font.deriveFont(3), antiAlias, charOffset);
+/* 384 */ this.FONT_HEIGHT = (int)getHeight();
+/* */ }
+/* */ }
+/* */
+/* */ public FontAtacher getFont() {
+/* 389 */ return this.font;
+/* */ }
+/* */
+/* */ public String getFontName() {
+/* 393 */ return this.font.getFont().getFontName();
+/* */ }
+/* */
+/* */ public int getSize() {
+/* 397 */ return this.font.getFont().getSize();
+/* */ }
+/* */
+/* */ public List wrapWords(String text, double width) {
+/* 401 */ List finalWords = new ArrayList();
+/* 402 */ if (getStringWidth(text) > width) {
+/* 403 */ String[] words = text.split(" ");
+/* 404 */ String currentWord = "";
+/* 405 */ char lastColorCode = Character.MAX_VALUE;
+/* 406 */ String[] var11 = words;
+/* 407 */ int var10 = words.length;
+/* */
+/* */
+/* 410 */ for (int var9 = 0; var9 < var10; var9++) {
+/* 411 */ String s = var11[var9];
+/* */
+/* 413 */ for (int i = 0; i < (s.toCharArray()).length; i++) {
+/* 414 */ char c = s.toCharArray()[i];
+/* 415 */ if (c == '§' && i < (s.toCharArray()).length - 1) {
+/* 416 */ lastColorCode = s.toCharArray()[i + 1];
+/* */ }
+/* */ }
+/* */
+/* 420 */ if (getStringWidth(String.valueOf(currentWord) + s + " ") < width) {
+/* 421 */ currentWord = String.valueOf(currentWord) + s + " ";
+/* */ } else {
+/* 423 */ finalWords.add(currentWord);
+/* 424 */ currentWord = (lastColorCode == -1) ? (String.valueOf(s) + " ") : ("§" + lastColorCode + s + " ");
+/* */ }
+/* */ }
+/* */
+/* 428 */ if (!currentWord.equals("")) {
+/* 429 */ if (getStringWidth(currentWord) < width) {
+/* 430 */ finalWords.add((lastColorCode == -1) ? (String.valueOf(currentWord) + " ") : ("§" + lastColorCode + currentWord + " "));
+/* 431 */ currentWord = "";
+/* */ } else {
+/* 433 */ Iterator var14 = formatString(currentWord, width).iterator();
+/* */
+/* 435 */ while (var14.hasNext()) {
+/* 436 */ String s = var14.next();
+/* 437 */ finalWords.add(s);
+/* */ }
+/* */ }
+/* */ }
+/* */ } else {
+/* 442 */ finalWords.add(text);
+/* */ }
+/* */
+/* 445 */ return finalWords;
+/* */ }
+/* */
+/* */ public List formatString(String s, double width) {
+/* 449 */ List finalWords = new ArrayList();
+/* 450 */ String currentWord = "";
+/* 451 */ char lastColorCode = Character.MAX_VALUE;
+/* */
+/* 453 */ for (int i = 0; i < (s.toCharArray()).length; i++) {
+/* 454 */ char c = s.toCharArray()[i];
+/* 455 */ if (c == '§' && i < (s.toCharArray()).length - 1) {
+/* 456 */ lastColorCode = s.toCharArray()[i + 1];
+/* */ }
+/* */
+/* 459 */ if (getStringWidth(String.valueOf(currentWord) + c) < width) {
+/* 460 */ currentWord = String.valueOf(currentWord) + c;
+/* */ } else {
+/* 462 */ finalWords.add(currentWord);
+/* 463 */ currentWord = (lastColorCode == -1) ? String.valueOf(c) : ("§" + lastColorCode + c);
+/* */ }
+/* */ }
+/* */
+/* 467 */ if (!currentWord.equals("")) {
+/* 468 */ finalWords.add(currentWord);
+/* */ }
+/* */
+/* 471 */ return finalWords;
+/* */ }
+/* */
+/* */ private void drawLine(double x, double y, double x1, double y1, float width) {
+/* 475 */ GL11.glDisable(3553);
+/* 476 */ GL11.glLineWidth(width);
+/* 477 */ GL11.glBegin(1);
+/* 478 */ GL11.glVertex2d(x, y);
+/* 479 */ GL11.glVertex2d(x1, y1);
+/* 480 */ GL11.glEnd();
+/* 481 */ GL11.glEnable(3553);
+/* */ }
+/* */
+/* */ public boolean isAntiAliasing() {
+/* 485 */ return (this.font.isAntiAlias() && this.boldFont.isAntiAlias() && this.italicFont.isAntiAlias() && this.boldItalicFont.isAntiAlias());
+/* */ }
+/* */
+/* */ public void setAntiAliasing(boolean antiAlias) {
+/* 489 */ this.font.setAntiAlias(antiAlias);
+/* 490 */ this.boldFont.setAntiAlias(antiAlias);
+/* 491 */ this.italicFont.setAntiAlias(antiAlias);
+/* 492 */ this.boldItalicFont.setAntiAlias(antiAlias);
+/* */ }
+/* */
+/* */ private void setupMinecraftColorcodes() {
+/* 496 */ for (int index = 0; index < 32; index++) {
+/* 497 */ int var6 = (index >> 3 & 0x1) * 85;
+/* 498 */ int var7 = (index >> 2 & 0x1) * 170 + var6;
+/* 499 */ int var8 = (index >> 1 & 0x1) * 170 + var6;
+/* 500 */ int var9 = (index >> 0 & 0x1) * 170 + var6;
+/* 501 */ if (index == 6) {
+/* 502 */ var7 += 85;
+/* */ }
+/* */
+/* 505 */ if (index >= 16) {
+/* 506 */ var7 /= 4;
+/* 507 */ var8 /= 4;
+/* 508 */ var9 /= 4;
+/* */ }
+/* */
+/* 511 */ this.colorCode[index] = (var7 & 0xFF) << 16 | (var8 & 0xFF) << 8 | var9 & 0xFF;
+/* */ }
+/* */ }
+/* */
+/* */
+/* */ public String trimStringToWidth(String p_78269_1_, int p_78269_2_) {
+/* 517 */ return trimStringToWidth(p_78269_1_, p_78269_2_, false);
+/* */ }
+/* */
+/* */ public String trimStringToWidth(String p_78262_1_, int p_78262_2_, boolean p_78262_3_) {
+/* 521 */ StringBuilder var4 = new StringBuilder();
+/* 522 */ int var5 = 0;
+/* 523 */ int var6 = p_78262_3_ ? (p_78262_1_.length() - 1) : 0;
+/* 524 */ int var7 = p_78262_3_ ? -1 : 1;
+/* 525 */ boolean var8 = false;
+/* 526 */ boolean var9 = false;
+/* */
+/* 528 */ for (int var10 = var6; var10 >= 0 && var10 < p_78262_1_.length() && var5 < p_78262_2_; var10 += var7) {
+/* 529 */ char var11 = p_78262_1_.charAt(var10);
+/* 530 */ int var12 = getStringWidth(Character.toString(var11));
+/* 531 */ if (var8) {
+/* 532 */ var8 = false;
+/* 533 */ if (var11 != 'l' && var11 != 'L') {
+/* 534 */ if (var11 == 'r' || var11 == 'R') {
+/* 535 */ var9 = false;
+/* */ }
+/* */ } else {
+/* 538 */ var9 = true;
+/* */ }
+/* 540 */ } else if (var12 < 0) {
+/* 541 */ var8 = true;
+/* */ } else {
+/* 543 */ var5 += var12;
+/* 544 */ if (var9) {
+/* 545 */ var5++;
+/* */ }
+/* */ }
+/* */
+/* 549 */ if (var5 > p_78262_2_) {
+/* */ break;
+/* */ }
+/* */
+/* 553 */ if (p_78262_3_) {
+/* 554 */ var4.insert(0, var11);
+/* */ } else {
+/* 556 */ var4.append(var11);
+/* */ }
+/* */ }
+/* */
+/* 560 */ return var4.toString();
+/* */ }
+/* */
+/* */ public List listFormattedStringToWidth(String str, int wrapWidth) {
+/* 564 */ return Arrays.asList(wrapFormattedStringToWidth(str, wrapWidth).split("\n"));
+/* */ }
+/* */
+/* */ public String wrapFormattedStringToWidth(String str, int wrapWidth) {
+/* 568 */ int var3 = sizeStringToWidth(str, wrapWidth);
+/* 569 */ if (str.length() <= var3) {
+/* 570 */ return str;
+/* */ }
+/* 572 */ String var4 = str.substring(0, var3);
+/* 573 */ char var5 = str.charAt(var3);
+/* 574 */ boolean var6 = !(var5 != ' ' && var5 != '\n');
+/* 575 */ String var7 = String.valueOf(getFormatFromString(var4)) + str.substring(var3 + (var6 ? 1 : 0));
+/* 576 */ return String.valueOf(var4) + "\n" + wrapFormattedStringToWidth(var7, wrapWidth);
+/* */ }
+/* */
+/* */
+/* */ public Color getColor(int colorCode, float alpha) {
+/* 581 */ return new Color((colorCode >> 16) / 255.0F, (colorCode >> 8 & 0xFF) / 255.0F, (colorCode & 0xFF) / 255.0F, alpha);
+/* */ }
+/* */
+/* */ private String setupColorcodeIdentifier() {
+/* 585 */ String minecraftColorCodes = "0123456789abcdefklmnor";
+/* */
+/* 587 */ for (int i = 0; i < this.customColorCodes.length; i++) {
+/* 588 */ if (this.customColorCodes[i] != null) {
+/* 589 */ minecraftColorCodes = String.valueOf(minecraftColorCodes) + (char)i;
+/* */ }
+/* */ }
+/* */
+/* 593 */ return minecraftColorCodes;
+/* */ }
+/* */
+/* */ public void onResourceManagerReload(IResourceManager p_110549_1_) {}
+/* */ }
+
+
+/* Location: D:\Client\jelly-recode-beta-1.6\Jelly-Recoded\Jelly-Recoded.jar!\wtf\jelly\fonts\cFontRenderer.class
+ * Java compiler version: 8 (52.0)
+ * JD-Core Version: 1.1.3
+ */
\ No newline at end of file
diff --git a/src/minecraft/animeware/util/font/MinecraftFontRenderer.java b/src/minecraft/animeware/util/font/MinecraftFontRenderer.java
new file mode 100644
index 0000000..951e124
--- /dev/null
+++ b/src/minecraft/animeware/util/font/MinecraftFontRenderer.java
@@ -0,0 +1,695 @@
+package animeware.util.font;
+
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.texture.DynamicTexture;
+import org.lwjgl.opengl.GL11;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.List;
+
+public class MinecraftFontRenderer extends CFont {
+ CFont.CharData[] boldChars = new CFont.CharData[256],
+ italicChars = new CFont.CharData[256],
+ boldItalicChars = new CFont.CharData[256];
+ int[] colorCode = new int[32];
+ String colorcodeIdentifiers = "0123456789abcdefklmnor";
+ DynamicTexture texBold, texItalic, texItalicBold;
+
+ public MinecraftFontRenderer(Font font, boolean antiAlias, boolean fractionalMetrics) {
+ super(font, antiAlias, fractionalMetrics);
+ this.setupMinecraftColorcodes();
+ this.setupBoldItalicIDs();
+ }
+
+ public int drawStringWithShadow(String text, double x2, float y2, int color) {
+
+ float shadowWidth = this.drawString(text, x2 + 0.9f, (double) y2 + 0.5f, color, true, 8.3f);
+
+ return (int) Math.max(shadowWidth, this.drawString(text, x2, y2, color, false, 8.3f));
+ }
+
+ public int drawString(String text, double x2, float y2, int color) {
+ return (int) this.drawString(text, x2, y2, color, false, 8.3f);
+ }
+
+ public int drawPassword(String text, double x2, float y2, int color) {
+ return (int) this.drawString(text.replaceAll(".", "."), x2, y2, color, false, 8f);
+ }
+
+ public int drawNoBSString(String text, double x2, float y2, int color) {
+ return (int) this.drawNoBSString(text, x2, y2, color, false);
+ }
+
+ public int drawSmoothString(String text, double x2, float y2, int color) {
+ return (int) this.drawSmoothString(text, x2, y2, color, false);
+ }
+
+ public double getPasswordWidth(String text) {
+ return this.getStringWidth(text.replaceAll(".", "."), 8);
+ }
+
+ public float drawCenteredString(String text, float x2, float y2, int color) {
+ return this.drawString(text, x2 - (float) (this.getStringWidth(text) / 2), y2, color);
+ }
+
+ public float drawNoBSCenteredString(String text, float x2, float y2, int color) {
+ return this.drawNoBSString(text, x2 - (float) (this.getStringWidth(text) / 2), y2, color);
+ }
+
+ public float drawCenteredStringWithShadow(String text, float x2, float y2, int color) {
+ return this.drawStringWithShadow(text, x2 - (float) (this.getStringWidth(text) / 2), y2, color);
+ }
+
+ public float drawString(String text, double x, double y, int color, boolean shadow, float kerning) {
+ x -= 1.0;
+
+ if (text == null) {
+ return 0;
+ }
+
+ if (color == 0x20FFFFFF) {
+ color = 0xFFFFFF;
+ }
+
+ if ((color & 0xFC000000) == 0) {
+ color |= 0xFF000000;
+ }
+
+ if (shadow) {
+ color = (color & 0xFCFCFC) >> 2 | color & 0xFF000000;
+ }
+
+ CFont.CharData[] currentData = this.charData;
+ float alpha = (float) (color >> 24 & 255) / 255f;
+ boolean randomCase = false,
+ bold = false,
+ italic = false,
+ strikethrough = false,
+ underline = false,
+ render = true;
+ x *= 2;
+ y = (y - 3) * 2;
+ GL11.glPushMatrix();
+ GlStateManager.scale(0.5, 0.5, 0.5);
+ GlStateManager.enableBlend();
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GlStateManager.color((float) (color >> 16 & 255) / 255f, (float) (color >> 8 & 255) / 255f, (float) (color & 255) / 255f, alpha);
+ GlStateManager.enableTexture2D();
+ GlStateManager.bindTexture(this.tex.getGlTextureId());
+ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.tex.getGlTextureId());
+
+ for (int index = 0; index < text.length(); index++) {
+ char character = text.charAt(index);
+
+ if (character == '\u00a7') {
+ int colorIndex = 21;
+
+ try {
+ colorIndex = "0123456789abcdefklmnor".indexOf(text.charAt(index + 1));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ if (colorIndex < 16) {
+ bold = false;
+ italic = false;
+ randomCase = false;
+ underline = false;
+ strikethrough = false;
+ GlStateManager.bindTexture(this.tex.getGlTextureId());
+ currentData = this.charData;
+
+ if (colorIndex < 0) {
+ colorIndex = 15;
+ }
+
+ if (shadow) {
+ colorIndex += 16;
+ }
+
+ int colorcode = this.colorCode[colorIndex];
+ GlStateManager.color((float) (colorcode >> 16 & 255) / 255f, (float) (colorcode >> 8 & 255) / 255f, (float) (colorcode & 255) / 255f, alpha);
+ } else if (colorIndex == 16) {
+ randomCase = true;
+ } else if (colorIndex == 17) {
+ bold = true;
+
+ if (italic) {
+ GlStateManager.bindTexture(this.texItalicBold.getGlTextureId());
+ currentData = this.boldItalicChars;
+ } else {
+ GlStateManager.bindTexture(this.texBold.getGlTextureId());
+ currentData = this.boldChars;
+ }
+ } else if (colorIndex == 18) {
+ strikethrough = true;
+ } else if (colorIndex == 19) {
+ underline = true;
+ } else if (colorIndex == 20) {
+ italic = true;
+
+ if (bold) {
+ GlStateManager.bindTexture(this.texItalicBold.getGlTextureId());
+ currentData = this.boldItalicChars;
+ } else {
+ GlStateManager.bindTexture(this.texItalic.getGlTextureId());
+ currentData = this.italicChars;
+ }
+ } else {
+ bold = false;
+ italic = false;
+ randomCase = false;
+ underline = false;
+ strikethrough = false;
+ GlStateManager.color((float) (color >> 16 & 255) / 255f, (float) (color >> 8 & 255) / 255f, (float) (color & 255) / 255f, alpha);
+ GlStateManager.bindTexture(this.tex.getGlTextureId());
+ currentData = this.charData;
+ }
+
+ ++index;
+ } else if (character < currentData.length) {
+ GL11.glBegin(GL11.GL_TRIANGLES);
+ this.drawChar(currentData, character, (float) x, (float) y);
+ GL11.glEnd();
+
+ if (strikethrough) {
+ this.drawLine(x, y + (double) (currentData[character].height / 2), x + (double) currentData[character].width - 8, y + (double) (currentData[character].height / 2), 1);
+ }
+
+ if (underline) {
+ this.drawLine(x, y + (double) currentData[character].height - 2, x + (double) currentData[character].width - 8, y + (double) currentData[character].height - 2, 1);
+ }
+
+ x += currentData[character].width - kerning + this.charOffset;
+ }
+ }
+
+ GL11.glHint(GL11.GL_POLYGON_SMOOTH_HINT, GL11.GL_DONT_CARE);
+ GL11.glPopMatrix();
+ GL11.glColor4f(1, 1, 1, 1);
+ return (float) x / 2f;
+ }
+
+ public float drawSmoothString(String text, double x, double y, int color, boolean shadow) {
+ x -= 1;
+
+ if (text == null) {
+ return 0;
+ }
+
+ CFont.CharData[] currentData = this.charData;
+ float alpha = (float) (color >> 24 & 255) / 255f;
+ boolean randomCase = false,
+ bold = false,
+ italic = false,
+ strikethrough = false,
+ underline = false,
+ render = true;
+ x *= 2;
+ y = (y - 3) * 2;
+ GL11.glPushMatrix();
+ GlStateManager.scale(0.5, 0.5, 0.5);
+ GlStateManager.enableBlend();
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GlStateManager.color((float) (color >> 16 & 255) / 255f, (float) (color >> 8 & 255) / 255f, (float) (color & 255) / 255f, alpha);
+ GlStateManager.enableTexture2D();
+ GlStateManager.bindTexture(this.tex.getGlTextureId());
+ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.tex.getGlTextureId());
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
+
+ for (int index = 0; index < text.length(); index++) {
+ char character = text.charAt(index);
+
+ if (character == '\u00a7') {
+ int colorIndex = 21;
+
+ try {
+ colorIndex = "0123456789abcdefklmnor".indexOf(text.charAt(index + 1));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ if (colorIndex < 16) {
+ bold = false;
+ italic = false;
+ randomCase = false;
+ underline = false;
+ strikethrough = false;
+ GlStateManager.bindTexture(this.tex.getGlTextureId());
+ currentData = this.charData;
+
+ if (colorIndex < 0) {
+ colorIndex = 15;
+ }
+
+ if (shadow) {
+ colorIndex += 16;
+ }
+
+ int colorcode = this.colorCode[colorIndex];
+ GlStateManager.color((float) (colorcode >> 16 & 255) / 255f, (float) (colorcode >> 8 & 255) / 255f, (float) (colorcode & 255) / 255f, alpha);
+ } else if (colorIndex == 16) {
+ randomCase = true;
+ } else if (colorIndex == 17) {
+ bold = true;
+
+ if (italic) {
+ GlStateManager.bindTexture(this.texItalicBold.getGlTextureId());
+ currentData = this.boldItalicChars;
+ } else {
+ GlStateManager.bindTexture(this.texBold.getGlTextureId());
+ currentData = this.boldChars;
+ }
+ } else if (colorIndex == 18) {
+ strikethrough = true;
+ } else if (colorIndex == 19) {
+ underline = true;
+ } else if (colorIndex == 20) {
+ italic = true;
+
+ if (bold) {
+ GlStateManager.bindTexture(this.texItalicBold.getGlTextureId());
+ currentData = this.boldItalicChars;
+ } else {
+ GlStateManager.bindTexture(this.texItalic.getGlTextureId());
+ currentData = this.italicChars;
+ }
+ } else {
+ bold = false;
+ italic = false;
+ randomCase = false;
+ underline = false;
+ strikethrough = false;
+ GlStateManager.color((float) (color >> 16 & 255) / 255f, (float) (color >> 8 & 255) / 255f, (float) (color & 255) / 255f, alpha);
+ GlStateManager.bindTexture(this.tex.getGlTextureId());
+ currentData = this.charData;
+ }
+
+ ++index;
+ } else if (character < currentData.length) {
+ GL11.glBegin(GL11.GL_TRIANGLES);
+ this.drawChar(currentData, character, (float) x, (float) y);
+ GL11.glEnd();
+
+ if (strikethrough) {
+ this.drawLine(x, y + (double) (currentData[character].height / 2), x + (double) currentData[character].width - 8, y + (double) (currentData[character].height / 2), 1);
+ }
+
+ if (underline) {
+ this.drawLine(x, y + (double) currentData[character].height - 2, x + (double) currentData[character].width - 8, y + (double) currentData[character].height - 2, 1);
+ }
+
+ x += currentData[character].width - 8.3f + this.charOffset;
+ }
+ }
+
+ GL11.glHint(GL11.GL_POLYGON_SMOOTH_HINT, GL11.GL_DONT_CARE);
+ GL11.glPopMatrix();
+ GL11.glColor4f(1, 1, 1, 1);
+ return (float) x / 2f;
+ }
+
+ public float drawNoBSString(String text, double x, double y, int color, boolean shadow) {
+ x -= 1;
+
+ if (text == null) {
+ return 0;
+ }
+
+ CFont.CharData[] currentData = this.charData;
+ float alpha = (float) (color >> 24 & 0xFF) / 255f;
+ boolean randomCase = false,
+ bold = false,
+ italic = false,
+ strikethrough = false,
+ underline = false,
+ render = true;
+ x *= 2;
+ y = (y - 3) * 2;
+ GL11.glPushMatrix();
+ GlStateManager.scale(0.5, 0.5, 0.5);
+ GlStateManager.enableBlend();
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GlStateManager.color((float) (color >> 16 & 255) / 255f, (float) (color >> 8 & 255) / 255f, (float) (color & 255) / 255f, alpha);
+ GlStateManager.enableTexture2D();
+ GlStateManager.bindTexture(this.tex.getGlTextureId());
+ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.tex.getGlTextureId());
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
+
+ for (int index = 0; index < text.length(); index++) {
+ char character = text.charAt(index);
+
+ if (character == '\u00a7') {
+ int colorIndex = 21;
+
+ try {
+ colorIndex = "0123456789abcdefklmnor".indexOf(text.charAt(index + 1));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ if (colorIndex < 16) {
+ bold = false;
+ italic = false;
+ randomCase = false;
+ underline = false;
+ strikethrough = false;
+ GlStateManager.bindTexture(this.tex.getGlTextureId());
+ currentData = this.charData;
+
+ if (colorIndex < 0) {
+ colorIndex = 15;
+ }
+
+ if (shadow) {
+ colorIndex += 16;
+ }
+
+ int colorcode = this.colorCode[colorIndex];
+ GlStateManager.color((float) (colorcode >> 16 & 255) / 255f, (float) (colorcode >> 8 & 255) / 255f, (float) (colorcode & 255) / 255f, alpha);
+ } else if (colorIndex == 16) {
+ randomCase = true;
+ } else if (colorIndex == 17) {
+ bold = true;
+
+ if (italic) {
+ GlStateManager.bindTexture(this.texItalicBold.getGlTextureId());
+ currentData = this.boldItalicChars;
+ } else {
+ GlStateManager.bindTexture(this.texBold.getGlTextureId());
+ currentData = this.boldChars;
+ }
+ } else if (colorIndex == 18) {
+ strikethrough = true;
+ } else if (colorIndex == 19) {
+ underline = true;
+ } else if (colorIndex == 20) {
+ italic = true;
+
+ if (bold) {
+ GlStateManager.bindTexture(this.texItalicBold.getGlTextureId());
+ currentData = this.boldItalicChars;
+ } else {
+ GlStateManager.bindTexture(this.texItalic.getGlTextureId());
+ currentData = this.italicChars;
+ }
+ } else {
+ bold = false;
+ italic = false;
+ randomCase = false;
+ underline = false;
+ strikethrough = false;
+ GlStateManager.color((float) (color >> 16 & 255) / 255f, (float) (color >> 8 & 255) / 255f, (float) (color & 255) / 255f, alpha);
+ GlStateManager.bindTexture(this.tex.getGlTextureId());
+ currentData = this.charData;
+ }
+
+ ++index;
+ } else if (character < currentData.length) {
+ GL11.glBegin(GL11.GL_TRIANGLES);
+ this.drawChar(currentData, character, (float) x, (float) y);
+ GL11.glEnd();
+
+ if (strikethrough) {
+ this.drawLine(x, y + (double) (currentData[character].height / 2), x + (double) currentData[character].width - 8, y + (double) (currentData[character].height / 2), 1);
+ }
+
+ if (underline) {
+ this.drawLine(x, y + (double) currentData[character].height - 2, x + (double) currentData[character].width - 8, y + (double) currentData[character].height - 2, 1);
+ }
+
+ x += currentData[character].width - 8.3f + this.charOffset;
+ }
+ }
+
+ GL11.glHint(GL11.GL_POLYGON_SMOOTH_HINT, GL11.GL_DONT_CARE);
+ GL11.glPopMatrix();
+ GL11.glColor4f(1, 1, 1, 1);
+ return (float) x / 2f;
+ }
+
+ public double getStringWidth(String text) {
+ if (text == null) {
+ return 0;
+ }
+
+ float width = 0;
+ CFont.CharData[] currentData = charData;
+ boolean bold = false, italic = false;
+
+ for (int index = 0; index < text.length(); index++) {
+ char character = text.charAt(index);
+
+ if (character == '\u00a7') {
+ int colorIndex = "0123456789abcdefklmnor".indexOf(character);
+
+ bold = false;
+ italic = false;
+
+ ++index;
+ } else if (character < currentData.length) {
+ width += currentData[character].width - 8.3f + charOffset;
+ }
+ }
+
+ return width / 2;
+ }
+
+ public double getStringWidth(String text, float kerning) {
+ if (text == null) {
+ return 0;
+ }
+
+ float width = 0;
+ CFont.CharData[] currentData = charData;
+ boolean bold = false, italic = false;
+
+ for (int index = 0; index < text.length(); index++) {
+ char c = text.charAt(index);
+
+ if (c == '\u00a7') {
+ int colorIndex = "0123456789abcdefklmnor".indexOf(c);
+
+ bold = false;
+ italic = false;
+
+ ++index;
+ } else if (c < currentData.length) {
+ width += currentData[c].width - kerning + charOffset;
+ }
+ }
+
+ return width / 2;
+ }
+
+ public int getHeight() {
+ return (this.fontHeight - 8) / 2;
+ }
+
+ @Override
+ public void setFont(Font font) {
+ super.setFont(font);
+ this.setupBoldItalicIDs();
+ }
+
+ @Override
+ public void setAntiAlias(boolean antiAlias) {
+ super.setAntiAlias(antiAlias);
+ this.setupBoldItalicIDs();
+ }
+
+ @Override
+ public void setFractionalMetrics(boolean fractionalMetrics) {
+ super.setFractionalMetrics(fractionalMetrics);
+ this.setupBoldItalicIDs();
+ }
+
+ private void setupBoldItalicIDs() {
+ this.texBold = this.setupTexture(this.font.deriveFont(Font.BOLD), this.antiAlias, this.fractionalMetrics, this.boldChars);
+ this.texItalic = this.setupTexture(this.font.deriveFont(Font.ITALIC), this.antiAlias, this.fractionalMetrics, this.italicChars);
+ this.texItalicBold = this.setupTexture(this.font.deriveFont(Font.BOLD | Font.ITALIC), this.antiAlias, this.fractionalMetrics, this.boldItalicChars);
+ }
+
+ private void drawLine(double x2, double y2, double x1, double y1, float width) {
+ GL11.glDisable(GL11.GL_TEXTURE_2D);
+ GL11.glLineWidth(width);
+ GL11.glBegin(GL11.GL_LINES);
+ GL11.glVertex2d(x2, y2);
+ GL11.glVertex2d(x1, y1);
+ GL11.glEnd();
+ GL11.glEnable(GL11.GL_TEXTURE_2D);
+ }
+
+ public List wrapWords(String text, double width) {
+ ArrayList finalWords = new ArrayList<>();
+
+ if (getStringWidth(text) > width) {
+ String[] words = text.split(" ");
+ StringBuilder currentWord = new StringBuilder();
+ char lastColorCode = 65535;
+
+ for (String word : words) {
+ for (int innerIndex = 0; innerIndex < word.toCharArray().length; innerIndex++) {
+ char c = word.toCharArray()[innerIndex];
+
+ if (c == '\u00a7' && innerIndex < word.toCharArray().length - 1) {
+ lastColorCode = word.toCharArray()[innerIndex + 1];
+ }
+ }
+
+ if (getStringWidth(currentWord + word + " ") < width) {
+ currentWord.append(word).append(" ");
+ } else {
+ finalWords.add(currentWord.toString());
+ currentWord = new StringBuilder("\u00a7" + lastColorCode + word + " ");
+ }
+ }
+
+ if (currentWord.length() > 0) {
+ if (getStringWidth(currentWord.toString()) < width) {
+ finalWords.add("\u00a7" + lastColorCode + currentWord + " ");
+ currentWord = new StringBuilder();
+ } else {
+ finalWords.addAll(formatString(currentWord.toString(), width));
+ }
+ }
+ } else {
+ finalWords.add(text);
+ }
+
+ return finalWords;
+ }
+
+ public List formatString(String string, double width) {
+ ArrayList finalWords = new ArrayList<>();
+ StringBuilder currentWord = new StringBuilder();
+ char lastColorCode = 65535;
+ char[] chars = string.toCharArray();
+
+ for (int index = 0; index < chars.length; index++) {
+ char c = chars[index];
+
+ if (c == '\u00a7' && index < chars.length - 1) {
+ lastColorCode = chars[index + 1];
+ }
+
+ if (getStringWidth(currentWord.toString() + c) < width) {
+ currentWord.append(c);
+ } else {
+ finalWords.add(currentWord.toString());
+ currentWord = new StringBuilder("\u00a7" + lastColorCode + c);
+ }
+ }
+
+ if (currentWord.length() > 0) {
+ finalWords.add(currentWord.toString());
+ }
+
+ return finalWords;
+ }
+
+ private void setupMinecraftColorcodes() {
+ int index = 0;
+
+ while (index < 32) {
+ int noClue = (index >> 3 & 1) * 85;
+ int red = (index >> 2 & 1) * 170 + noClue;
+ int green = (index >> 1 & 1) * 170 + noClue;
+ int blue = (index & 1) * 170 + noClue;
+
+ if (index == 6) {
+ red += 85;
+ }
+
+ if (index >= 16) {
+ red /= 4;
+ green /= 4;
+ blue /= 4;
+ }
+
+ this.colorCode[index] = (red & 255) << 16 | (green & 255) << 8 | blue & 255;
+ ++index;
+ }
+ }
+
+ public String trimStringToWidth(String text, int width) {
+ return this.trimStringToWidth(text, width, false);
+ }
+
+ public String trimStringToWidthPassword(String text, int width, boolean custom) {
+ text = text.replaceAll(".", ".");
+ return this.trimStringToWidth(text, width, custom);
+ }
+
+ private float getCharWidthFloat(char c) {
+ if (c == 167) {
+ return -1;
+ } else if (c == 32) {
+ return 2;
+ } else {
+ int var2 = "\u00c0\u00c1\u00c2\u00c8\u00ca\u00cb\u00cd\u00d3\u00d4\u00d5\u00da\u00df\u00e3\u00f5\u011f\u0130\u0131\u0152\u0153\u015e\u015f\u0174\u0175\u017e\u0207\u0000\u0000\u0000\u0000\u0000\u0000\u0000 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u0000\u00c7\u00fc\u00e9\u00e2\u00e4\u00e0\u00e5\u00e7\u00ea\u00eb\u00e8\u00ef\u00ee\u00ec\u00c4\u00c5\u00c9\u00e6\u00c6\u00f4\u00f6\u00f2\u00fb\u00f9\u00ff\u00d6\u00dc\u00f8\u00a3\u00d8\u00d7\u0192\u00e1\u00ed\u00f3\u00fa\u00f1\u00d1\u00aa\u00ba\u00bf\u00ae\u00ac\u00bd\u00bc\u00a1\u00ab\u00bb\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\u03b2\u0393\u03c0\u03a3\u03c3\u03bc\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u2205\u2208\u2229\u2261\u00b1\u2265\u2264\u2320\u2321\u00f7\u2248\u00b0\u2219\u00b7\u221a\u207f\u00b2\u25a0\u0000"
+ .indexOf(c);
+
+ if (c > 0 && var2 != -1) {
+ return ((charData[var2].width / 2.f) - 4.f);
+ } else if (((charData[c].width / 2.f) - 4.f) != 0) {
+ int var3 = ((int) ((charData[c].width / 2.f) - 4.f)) >>> 4;
+ int var4 = ((int) ((charData[c].width / 2.f) - 4.f)) & 15;
+ var3 &= 15;
+ ++var4;
+ return (float) ((var4 - var3) / 2 + 1);
+ } else {
+ return 0;
+ }
+ }
+ }
+
+ public String trimStringToWidth(String text, int width, boolean custom) {
+ StringBuilder buffer = new StringBuilder();
+ float lineWidth = 0.0F;
+ int offset = custom ? text.length() - 1 : 0;
+ int increment = custom ? -1 : 1;
+ boolean var8 = false;
+ boolean var9 = false;
+
+ for (int index = offset; index >= 0 && index < text.length() && lineWidth < (float) width; index += increment) {
+ char character = text.charAt(index);
+ float charWidth = this.getCharWidthFloat(character);
+
+ if (var8) {
+ var8 = false;
+
+ if (character != 108 && character != 76) {
+ if (character == 114 || character == 82) {
+ var9 = false;
+ }
+ } else {
+ var9 = true;
+ }
+ } else if (charWidth < 0) {
+ var8 = true;
+ } else {
+ lineWidth += charWidth;
+
+ if (var9) {
+ ++lineWidth;
+ }
+ }
+
+ if (lineWidth > (float) width) {
+ break;
+ }
+
+ if (custom) {
+ buffer.insert(0, character);
+ } else {
+ buffer.append(character);
+ }
+ }
+
+ return buffer.toString();
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/util/font/TenaFontUtil.java b/src/minecraft/animeware/util/font/TenaFontUtil.java
new file mode 100644
index 0000000..6b6d071
--- /dev/null
+++ b/src/minecraft/animeware/util/font/TenaFontUtil.java
@@ -0,0 +1,69 @@
+package animeware.util.font;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.util.ResourceLocation;
+
+import java.awt.*;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+public class TenaFontUtil {
+ public static volatile int completed;
+ //These are for the icon font for ease of access
+ public final static String
+ BUG = "a",
+ LIST = "b",
+ BOMB = "c",
+ EYE = "d",
+ PERSON = "e",
+ WHEELCHAIR = "f",
+ SCRIPT = "g",
+ SKIP_LEFT = "h",
+ PAUSE = "i",
+ PLAY = "j",
+ SKIP_RIGHT = "k",
+ SHUFFLE = "l",
+ INFO = "m",
+ SETTINGS = "n",
+ CHECKMARK = "o",
+ XMARK = "p",
+ TRASH = "q",
+ WARNING = "r",
+ FOLDER = "s",
+ LOAD = "t",
+ SAVE = "u";
+
+
+ public static MinecraftFontRenderer tenacityFont14, tenacityFont16, tenacityFont18, tenacityBoldFont18, tenacityFont20, tenacityBoldFont20, tenacityFont22, tenacityBoldFont22, tenacityFont24, tenacityBoldFont26, tenacityBoldFont32, tenacityFont40, tenacityBoldFont40, iconFont16, iconFont20, iconFont26, iconFont35, iconFont40;
+ public static Font tenacityBoldFont40_;
+
+
+ public TenaFontUtil() {
+
+
+ }
+
+ public static Font getFont(Map locationMap, String location, int size) {
+ Font font;
+ try {
+ if (locationMap.containsKey(location)) {
+ font = locationMap.get(location).deriveFont(Font.PLAIN, size);
+ } else {
+ InputStream is = Minecraft.getMinecraft().getResourceManager()
+ .getResource(new ResourceLocation("Animeware/fonts/" + location)).getInputStream();
+ locationMap.put(location, font = Font.createFont(0, is));
+ font = font.deriveFont(Font.PLAIN, size);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.out.println("Error loading font");
+ font = new Font("default", Font.PLAIN, +10);
+ }
+ return font;
+ }
+
+ public static boolean hasLoaded() {
+ return completed >= 3;
+ }
+}
diff --git a/src/minecraft/animeware/util/font/ucfont/UCFont$CharData.java b/src/minecraft/animeware/util/font/ucfont/UCFont$CharData.java
new file mode 100644
index 0000000..e0bd3de
--- /dev/null
+++ b/src/minecraft/animeware/util/font/ucfont/UCFont$CharData.java
@@ -0,0 +1,11 @@
+package animeware.util.font.ucfont;
+
+class UCFont$CharData {
+ public int width;
+ public int height;
+ public int storedX;
+ public int storedY;
+
+ protected UCFont$CharData() {
+ }
+}
diff --git a/src/minecraft/animeware/util/font/ucfont/UCFont.java b/src/minecraft/animeware/util/font/ucfont/UCFont.java
new file mode 100644
index 0000000..5381171
--- /dev/null
+++ b/src/minecraft/animeware/util/font/ucfont/UCFont.java
@@ -0,0 +1,176 @@
+package animeware.util.font.ucfont;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.FontFormatException;
+import java.awt.FontMetrics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.io.InputStream;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.texture.DynamicTexture;
+import net.minecraft.util.ResourceLocation;
+import org.lwjgl.opengl.GL11;
+
+public class UCFont {
+ protected CharData[] charData = new CharData[256];
+ protected DynamicTexture tex;
+ protected Font font;
+ protected boolean antiAlias;
+ protected boolean fractionalMetrics;
+ protected int fontHeight = -1;
+ protected int charOffset = 0;
+ private float imgSize = 1048.0f;
+
+ public UCFont(ResourceLocation resourceLocation, float size) {
+ Font tmp;
+ try {
+ InputStream is = Minecraft.getMinecraft().getResourceManager().getResource(resourceLocation).getInputStream();
+ tmp = Font.createFont(0, is).deriveFont(size);
+ }
+ catch (FontFormatException | IOException e) {
+ tmp = new Font("Arial", 0, (int)size);
+ e.printStackTrace();
+ }
+ this.font = tmp;
+ this.antiAlias = true;
+ this.fractionalMetrics = true;
+ this.tex = this.setupTexture(this.font, true, true, this.charData);
+ }
+
+ protected DynamicTexture setupTexture(Font font, boolean antiAlias, boolean fractionalMetrics, CharData[] chars) {
+ BufferedImage img = this.generateFontImage(font, antiAlias, fractionalMetrics, chars);
+ try {
+ return new DynamicTexture(img);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ private BufferedImage generateFontImage(Font font, boolean antiAlias, boolean fractionalMetrics, CharData[] chars) {
+ int imgSize = (int)this.imgSize;
+ BufferedImage bufferedImage = new BufferedImage(imgSize, imgSize, 2);
+ Graphics2D g = (Graphics2D)bufferedImage.getGraphics();
+ g.setFont(font);
+ g.setColor(new Color(255, 255, 255, 0));
+ g.fillRect(0, 0, imgSize, imgSize);
+ g.setColor(Color.WHITE);
+ g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, fractionalMetrics ? RenderingHints.VALUE_FRACTIONALMETRICS_ON : RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
+ g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, antiAlias ? RenderingHints.VALUE_TEXT_ANTIALIAS_ON : RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
+ g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, antiAlias ? RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF);
+ FontMetrics fontMetrics = g.getFontMetrics();
+ int charHeight = 0;
+ int positionX = 0;
+ int positionY = 1;
+ for (int i = 0; i < chars.length; ++i) {
+ char ch = (char)i;
+ CharData charData = new CharData();
+ Rectangle2D dimensions = fontMetrics.getStringBounds(String.valueOf(ch), g);
+ charData.width = dimensions.getBounds().width + 8;
+ charData.height = dimensions.getBounds().height;
+ if (positionX + charData.width >= imgSize) {
+ positionX = 0;
+ positionY += charHeight;
+ charHeight = 0;
+ }
+ if (charData.height > charHeight) {
+ charHeight = charData.height;
+ }
+ charData.storedX = positionX;
+ charData.storedY = positionY;
+ if (charData.height > this.fontHeight) {
+ this.fontHeight = charData.height;
+ }
+ chars[i] = charData;
+ g.drawString(String.valueOf(ch), positionX + 2, positionY + fontMetrics.getAscent());
+ positionX += charData.width;
+ }
+ return bufferedImage;
+ }
+
+ protected void drawChar(CharData[] chars, char c, float x, float y) throws ArrayIndexOutOfBoundsException {
+ try {
+ this.drawQuad(x, y, chars[c].width, chars[c].height, chars[c].storedX, chars[c].storedY, chars[c].width, chars[c].height);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void drawQuad(float x, float y, float width, float height, float srcX, float srcY, float srcWidth, float srcHeight) {
+ float renderSRCX = srcX / this.imgSize;
+ float renderSRCY = srcY / this.imgSize;
+ float renderSRCWidth = srcWidth / this.imgSize;
+ float renderSRCHeight = srcHeight / this.imgSize;
+ GL11.glTexCoord2f(renderSRCX + renderSRCWidth, renderSRCY);
+ GL11.glVertex2d(x + width, y);
+ GL11.glTexCoord2f(renderSRCX, renderSRCY);
+ GL11.glVertex2d(x, y);
+ GL11.glTexCoord2f(renderSRCX, renderSRCY + renderSRCHeight);
+ GL11.glVertex2d(x, y + height);
+ GL11.glTexCoord2f(renderSRCX, renderSRCY + renderSRCHeight);
+ GL11.glVertex2d(x, y + height);
+ GL11.glTexCoord2f(renderSRCX + renderSRCWidth, renderSRCY + renderSRCHeight);
+ GL11.glVertex2d(x + width, y + height);
+ GL11.glTexCoord2f(renderSRCX + renderSRCWidth, renderSRCY);
+ GL11.glVertex2d(x + width, y);
+ }
+
+ public int getHeight() {
+ return (this.fontHeight - 8) / 2;
+ }
+
+ public int getStringWidth(String text) {
+ int width = 0;
+ for (char c : text.toCharArray()) {
+ if (c >= this.charData.length) continue;
+ width += this.charData[c].width - 8 + this.charOffset;
+ }
+ return width / 2;
+ }
+
+ public boolean isAntiAlias() {
+ return this.antiAlias;
+ }
+
+ public void setAntiAlias(boolean antiAlias) {
+ if (this.antiAlias != antiAlias) {
+ this.antiAlias = antiAlias;
+ this.tex = this.setupTexture(this.font, antiAlias, this.fractionalMetrics, this.charData);
+ }
+ }
+
+ public boolean isFractionalMetrics() {
+ return this.fractionalMetrics;
+ }
+
+ public void setFractionalMetrics(boolean fractionalMetrics) {
+ if (this.fractionalMetrics != fractionalMetrics) {
+ this.fractionalMetrics = fractionalMetrics;
+ this.tex = this.setupTexture(this.font, this.antiAlias, fractionalMetrics, this.charData);
+ }
+ }
+
+ public Font getFont() {
+ return this.font;
+ }
+
+ public void setFont(Font font) {
+ this.font = font;
+ this.tex = this.setupTexture(font, this.antiAlias, this.fractionalMetrics, this.charData);
+ }
+
+ protected class CharData {
+ public int width;
+ public int height;
+ public int storedX;
+ public int storedY;
+
+
+ }
+}
diff --git a/src/minecraft/animeware/util/font/ucfont/UCFontRenderer.java b/src/minecraft/animeware/util/font/ucfont/UCFontRenderer.java
new file mode 100644
index 0000000..e9ea4f5
--- /dev/null
+++ b/src/minecraft/animeware/util/font/ucfont/UCFontRenderer.java
@@ -0,0 +1,382 @@
+package animeware.util.font.ucfont;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.lwjgl.opengl.GL11;
+
+import net.minecraft.client.renderer.texture.DynamicTexture;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.ResourceLocation;
+
+public final class UCFontRenderer
+extends UCFont {
+ protected final UCFont.CharData[] boldItalicChars = new UCFont.CharData[256];
+ protected final UCFont.CharData[] italicChars = new UCFont.CharData[256];
+ protected final UCFont.CharData[] boldChars = new UCFont.CharData[256];
+ private final int[] colorCode = new int[32];
+ private char COLOR_CODE_START = (char)167;
+ protected DynamicTexture texBold;
+ protected DynamicTexture texItalic;
+ protected DynamicTexture texItalicBold;
+
+ public UCFontRenderer(ResourceLocation resourceLocation, float size) {
+ super(resourceLocation, size);
+ this.setupMinecraftColorCodes();
+ this.setupBoldItalicIDs();
+ }
+
+ public float drawStringWithShadow(String text, double x, double y, int color, int shadowColor) {
+ float shadowWidth = this.drawString(text, x + 1.0, y + 1.0, shadowColor, false);
+ return Math.max(shadowWidth, this.drawString(text, x, y, color, false));
+ }
+
+ public float drawStringWithShadow(String text, double x, double y, int color) {
+ float shadowWidth = this.drawString(text, x + 1.0, y + 1.0, color, true);
+ return Math.max(shadowWidth, this.drawString(text, x, y, color, false));
+ }
+
+ public float drawString(String text, float x, float y, int color) {
+ return this.drawString(text, x, y, color, false);
+ }
+
+ public float drawCenteredString(String text, float x, float y, int color) {
+ return this.drawString(text, x - (float)this.getStringWidth(text) / 2.0f, y, color);
+ }
+
+ public float drawCenteredStringWithShadow(String text, float x, float y, int color) {
+ this.drawString(text, (double)(x - (float)this.getStringWidth(text) / 2.0f) + 1.0, (double)y + 1.0, color, true);
+ return this.drawString(text, x - (float)this.getStringWidth(text) / 2.0f, y, color);
+ }
+
+ public float drawString(String text, double x, double y, int color, boolean shadow) {
+ x -= 1.0;
+ if (text == null) {
+ return 0.0f;
+ }
+ if (color == 0x20FFFFFF) {
+ color = 0xFFFFFF;
+ }
+ if ((color & 0xFC000000) == 0) {
+ color |= 0xFF000000;
+ }
+ if (shadow) {
+ color = (color & 0xFCFCFC) >> 2 | color & 0xFF000000;
+ }
+ UCFont.CharData[] currentData = this.charData;
+ float alpha = (float)(color >> 24 & 0xFF) / 255.0f;
+ boolean bold = false;
+ boolean italic = false;
+ boolean strike = false;
+ boolean underline = false;
+ boolean render = true;
+ x *= 2.0;
+ y = (y - 3.0) * 2.0;
+ if (render) {
+ GL11.glPushMatrix();
+ GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+ GL11.glScaled(0.5, 0.5, 0.5);
+ GL11.glEnable(3042);
+ GL11.glBlendFunc(770, 771);
+ GL11.glColor4f((float)(color >> 16 & 0xFF) / 255.0f, (float)(color >> 8 & 0xFF) / 255.0f, (float)(color & 0xFF) / 255.0f, alpha);
+ int size = text.length();
+ GL11.glEnable(3553);
+ GL11.glBindTexture(3553, this.tex.getGlTextureId());
+ for (int i = 0; i < size; ++i) {
+ char character = text.charAt(i);
+ if (character == this.COLOR_CODE_START && i < size) {
+ int colorIndex = 21;
+ try {
+ colorIndex = "0123456789abcdefklmnor".indexOf(text.charAt(i + 1));
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ if (colorIndex < 16) {
+ bold = false;
+ italic = false;
+ underline = false;
+ strike = false;
+ GL11.glBindTexture(3553, this.tex.getGlTextureId());
+ currentData = this.charData;
+ if (colorIndex < 0 || colorIndex > 15) {
+ colorIndex = 15;
+ }
+ if (shadow) {
+ colorIndex += 16;
+ }
+ int cc = this.colorCode[colorIndex];
+ GL11.glColor4f((float)(cc >> 16 & 0xFF) / 255.0f, (float)(cc >> 8 & 0xFF) / 255.0f, (float)(cc & 0xFF) / 255.0f, alpha);
+ } else if (colorIndex != 16) {
+ if (colorIndex == 17) {
+ bold = true;
+ if (italic) {
+ GL11.glBindTexture(3553, this.texItalicBold.getGlTextureId());
+ currentData = this.boldItalicChars;
+ } else {
+ GL11.glBindTexture(3553, this.texBold.getGlTextureId());
+ currentData = this.boldChars;
+ }
+ } else if (colorIndex == 18) {
+ strike = true;
+ } else if (colorIndex == 19) {
+ underline = true;
+ } else if (colorIndex == 20) {
+ italic = true;
+ if (bold) {
+ GL11.glBindTexture(3553, this.texItalicBold.getGlTextureId());
+ currentData = this.boldItalicChars;
+ } else {
+ GL11.glBindTexture(3553, this.texItalic.getGlTextureId());
+ currentData = this.italicChars;
+ }
+ } else if (colorIndex == 21) {
+ bold = false;
+ italic = false;
+ underline = false;
+ strike = false;
+ GL11.glColor4f((float)(color >> 16 & 0xFF) / 255.0f, (float)(color >> 8 & 0xFF) / 255.0f, (float)(color & 0xFF) / 255.0f, alpha);
+ GL11.glBindTexture(3553, this.tex.getGlTextureId());
+ currentData = this.charData;
+ }
+ }
+ ++i;
+ continue;
+ }
+ if (character >= currentData.length || character < '\u0000') continue;
+ GL11.glBegin(4);
+ this.drawChar(currentData, character, (float)x, (float)y + 6.0f);
+ GL11.glEnd();
+ if (strike) {
+ this.drawLine(x, y + (double)(currentData[character].height / 2), x + (double)currentData[character].width - 8.0, y + (double)(currentData[character].height / 2));
+ }
+ if (underline) {
+ this.drawLine(x, y + (double)currentData[character].height - 2.0, x + (double)currentData[character].width - 8.0, y + (double)currentData[character].height - 2.0);
+ }
+ x += (double)(currentData[character].width - 8 + this.charOffset);
+ }
+ GL11.glHint(3155, 4352);
+ GL11.glPopMatrix();
+ }
+ return (float)x / 2.0f;
+ }
+
+ @Override
+ public int getStringWidth(String text) {
+ if (text == null) {
+ return 0;
+ }
+ int width = 0;
+ UCFont.CharData[] currentData = this.charData;
+ boolean bold = false;
+ boolean italic = false;
+ int size = text.length();
+ for (int i = 0; i < size; ++i) {
+ char character = text.charAt(i);
+ if (character == this.COLOR_CODE_START) {
+ int colorIndex = "0123456789abcdefklmnor".indexOf(character);
+ if (colorIndex < 16) {
+ bold = false;
+ italic = false;
+ } else if (colorIndex == 17) {
+ bold = true;
+ currentData = italic ? this.boldItalicChars : this.boldChars;
+ } else if (colorIndex == 20) {
+ italic = true;
+ currentData = bold ? this.boldItalicChars : this.italicChars;
+ } else if (colorIndex == 21) {
+ bold = false;
+ italic = false;
+ currentData = this.charData;
+ }
+ ++i;
+ continue;
+ }
+ if (character >= currentData.length) continue;
+ width += currentData[character].width - 8 + this.charOffset;
+ }
+ return width / 2;
+ }
+
+ public String trimStringToWidth(String string, double d) {
+ return this.trimStringToWidth(string, d, false);
+ }
+
+ public String trimStringToWidth(String string, double d, boolean bl) {
+ StringBuilder stringBuilder = new StringBuilder();
+ float f = 0.0f;
+ int n = bl ? string.length() - 1 : 0;
+ int n2 = bl ? -1 : 1;
+ boolean bl2 = false;
+ boolean bl3 = false;
+ for (int i = n; i >= 0 && i < string.length() && f < (float)d; i += n2) {
+ char c = string.charAt(i);
+ double d2 = this.getStringWidth(String.valueOf(c));
+ if (bl2) {
+ bl2 = false;
+ if (c != 'l' && c != 'L') {
+ if (c == 'r' || c == 'R') {
+ bl3 = false;
+ }
+ } else {
+ bl3 = true;
+ }
+ } else if (d2 < 0.0) {
+ bl2 = true;
+ } else {
+ f = (float)((double)f + d2);
+ if (bl3) {
+ f += 1.0f;
+ }
+ }
+ if (f > (float)d) break;
+ if (bl) {
+ stringBuilder.insert(0, c);
+ continue;
+ }
+ stringBuilder.append(c);
+ }
+ return stringBuilder.toString();
+ }
+
+ @Override
+ public void setAntiAlias(boolean antiAlias) {
+ super.setAntiAlias(antiAlias);
+ this.setupBoldItalicIDs();
+ }
+
+ @Override
+ public void setFractionalMetrics(boolean fractionalMetrics) {
+ super.setFractionalMetrics(fractionalMetrics);
+ this.setupBoldItalicIDs();
+ }
+
+ private void setupBoldItalicIDs() {
+ this.texBold = this.setupTexture(this.font.deriveFont(1), this.antiAlias, this.fractionalMetrics, this.boldChars);
+ this.texItalic = this.setupTexture(this.font.deriveFont(2), this.antiAlias, this.fractionalMetrics, this.italicChars);
+ this.texItalicBold = this.setupTexture(this.font.deriveFont(3), this.antiAlias, this.fractionalMetrics, this.boldItalicChars);
+ }
+
+ private void drawLine(double x, double y, double x1, double y1) {
+ GL11.glDisable(3553);
+ GL11.glLineWidth(1.0f);
+ GL11.glBegin(1);
+ GL11.glVertex2d(x, y);
+ GL11.glVertex2d(x1, y1);
+ GL11.glEnd();
+ GL11.glEnable(3553);
+ }
+
+ public String lIIIIIIIIIlIllIIllIlIIlIl(String string, double width) {
+ StringBuilder stringBuilder = new StringBuilder();
+ StringBuilder stringBuilder2 = new StringBuilder();
+ boolean wasLastCharColorCode = false;
+ for (char c : string.toCharArray()) {
+ String string2;
+ String string3;
+ if (wasLastCharColorCode) {
+ stringBuilder.append(c);
+ wasLastCharColorCode = false;
+ continue;
+ }
+ if (c == '') {
+ stringBuilder.append(c);
+ wasLastCharColorCode = true;
+ continue;
+ }
+ stringBuilder.append(c);
+ int stringWidth = this.getStringWidth(stringBuilder.toString());
+ if (!((double)stringWidth >= width)) continue;
+ String string4 = stringBuilder.toString();
+ if (string4.contains(" ")) {
+ string3 = string4.substring(0, string4.lastIndexOf(" "));
+ string2 = string4.substring(string4.lastIndexOf(" "));
+ if (string2.startsWith(" ")) {
+ string2 = string2.replaceFirst(" ", "");
+ }
+ } else {
+ string3 = string4.substring(0, string4.length() - 1);
+ string2 = string4.substring(string4.length() - 1);
+ }
+ stringBuilder2.append(string3).append("\n");
+ String string5 = EnumChatFormatting.getTextWithoutFormattingCodes(stringBuilder.toString());
+ stringBuilder.setLength(0);
+ stringBuilder.append(string2).append(string5);
+ }
+ stringBuilder2.append((CharSequence)stringBuilder);
+ return stringBuilder2.length() == 0 ? string : stringBuilder2.toString();
+ }
+
+ public List wrapWords(String text, double width) {
+ ArrayList finalWords = new ArrayList();
+ if ((double)this.getStringWidth(text) > width) {
+ String[] words = text.split(" ");
+ StringBuilder currentWord = new StringBuilder();
+ int lastColorCode = 65535;
+ for (String word : words) {
+ for (int i = 0; i < word.toCharArray().length; ++i) {
+ char c = word.toCharArray()[i];
+ if (c != this.COLOR_CODE_START || i >= word.toCharArray().length - 1) continue;
+ lastColorCode = word.toCharArray()[i + 1];
+ }
+ if ((double)this.getStringWidth(currentWord + word + " ") < width) {
+ currentWord.append(word).append(" ");
+ continue;
+ }
+ finalWords.add(currentWord.toString());
+ currentWord = new StringBuilder(this.COLOR_CODE_START + lastColorCode + word + " ");
+ }
+ if (currentWord.length() > 0) {
+ if ((double)this.getStringWidth(currentWord.toString()) < width) {
+ finalWords.add(this.COLOR_CODE_START + lastColorCode + currentWord.toString() + " ");
+ } else {
+ finalWords.addAll(this.formatString(currentWord.toString(), width));
+ }
+ }
+ } else {
+ finalWords.add(text);
+ }
+ return finalWords;
+ }
+
+ public List formatString(String string, double width) {
+ ArrayList finalWords = new ArrayList();
+ StringBuilder currentWord = new StringBuilder();
+ int lastColorCode = 65535;
+ char[] chars = string.toCharArray();
+ for (int i = 0; i < chars.length; ++i) {
+ char c = chars[i];
+ if (c == this.COLOR_CODE_START && i < chars.length - 1) {
+ lastColorCode = chars[i + 1];
+ }
+ if ((double)this.getStringWidth(currentWord.toString() + c) < width) {
+ currentWord.append(c);
+ continue;
+ }
+ finalWords.add(currentWord.toString());
+ currentWord = new StringBuilder(this.COLOR_CODE_START + lastColorCode + String.valueOf(c));
+ }
+ if (currentWord.length() > 0) {
+ finalWords.add(currentWord.toString());
+ }
+ return finalWords;
+ }
+
+ private void setupMinecraftColorCodes() {
+ for (int index = 0; index < 32; ++index) {
+ int alpha = (index >> 3 & 1) * 85;
+ int red = (index >> 2 & 1) * 170 + alpha;
+ int green = (index >> 1 & 1) * 170 + alpha;
+ int blue = (index & 1) * 170 + alpha;
+ if (index == 6) {
+ red += 85;
+ }
+ if (index >= 16) {
+ red /= 4;
+ green /= 4;
+ blue /= 4;
+ }
+ this.colorCode[index] = (red & 0xFF) << 16 | (green & 0xFF) << 8 | blue & 0xFF;
+ }
+ }
+}
diff --git a/src/minecraft/animeware/util/frames/BetterframesConfig.java b/src/minecraft/animeware/util/frames/BetterframesConfig.java
new file mode 100644
index 0000000..44023e4
--- /dev/null
+++ b/src/minecraft/animeware/util/frames/BetterframesConfig.java
@@ -0,0 +1,76 @@
+package animeware.util.frames;
+
+public class BetterframesConfig
+{
+ private BetterframesConfig.BFRenderType renderImprovements = BetterframesConfig.BFRenderType.EXPERIMENTAL;
+ private boolean weather = true;
+ private boolean reducedChunkUpdates = true;
+ private boolean fogEnabled = true;
+ private boolean worldSwitchDirtScreen = true;
+
+ public boolean isRenderImprovements()
+ {
+ return this.renderImprovements == BetterframesConfig.BFRenderType.EXPERIMENTAL;
+ }
+
+ public BetterframesConfig.BFRenderType getRenderImprovements()
+ {
+ return this.renderImprovements;
+ }
+
+ public void setRenderImprovements(boolean enabled)
+ {
+ this.setRenderImprovements(enabled ? BetterframesConfig.BFRenderType.EXPERIMENTAL : BetterframesConfig.BFRenderType.DEFAULT);
+ }
+
+ public void setRenderImprovements(BetterframesConfig.BFRenderType renderImprovements)
+ {
+ this.renderImprovements = renderImprovements;
+ }
+
+ public boolean isWeather()
+ {
+ return this.weather;
+ }
+
+ public void setWeather(boolean weather)
+ {
+ this.weather = weather;
+ }
+
+ public boolean isReducedChunkUpdates()
+ {
+ return this.reducedChunkUpdates;
+ }
+
+ public void setReducedChunkUpdates(boolean reducedChunkUpdates)
+ {
+ this.reducedChunkUpdates = reducedChunkUpdates;
+ }
+
+ public boolean isFogEnabled()
+ {
+ return this.fogEnabled;
+ }
+
+ public void setFogEnabled(boolean fogEnabled)
+ {
+ this.fogEnabled = fogEnabled;
+ }
+
+ public boolean isWorldSwitchDirtScreen()
+ {
+ return this.worldSwitchDirtScreen;
+ }
+
+ public void setWorldSwitchDirtScreen(boolean worldSwitchDirtScreen)
+ {
+ this.worldSwitchDirtScreen = worldSwitchDirtScreen;
+ }
+
+ private static enum BFRenderType
+ {
+ EXPERIMENTAL,
+ DEFAULT;
+ }
+}
diff --git a/src/minecraft/animeware/util/lukflug/ColorSetting.java b/src/minecraft/animeware/util/lukflug/ColorSetting.java
new file mode 100644
index 0000000..9cd5bc4
--- /dev/null
+++ b/src/minecraft/animeware/util/lukflug/ColorSetting.java
@@ -0,0 +1,39 @@
+package animeware.util.lukflug;
+
+import java.awt.Color;
+
+/**
+ * Setting representing a color.
+ * @author lukflug
+ */
+public interface ColorSetting {
+ /**
+ * Get the current value for the color setting.
+ * @return the current color
+ */
+ Color getValue();
+
+ /**
+ * Set the non-rainbow color.
+ * @param value the value
+ */
+ void setValue (Color value);
+
+ /**
+ * Get the color, ignoring the rainbow.
+ * @return the color ignoring the rainbow
+ */
+ public Color getColor();
+
+ /**
+ * Check if rainbow is enabled.
+ * @return set, if the rainbow is enabled
+ */
+ public boolean getRainbow();
+
+ /**
+ * Enable or disable the rainbow.
+ * @param rainbow set, if rainbow should be enabled
+ */
+ public void setRainbow (boolean rainbow);
+}
diff --git a/src/minecraft/animeware/util/lukflug/EnumSetting.java b/src/minecraft/animeware/util/lukflug/EnumSetting.java
new file mode 100644
index 0000000..bb81833
--- /dev/null
+++ b/src/minecraft/animeware/util/lukflug/EnumSetting.java
@@ -0,0 +1,18 @@
+package animeware.util.lukflug;
+
+/**
+ * A setting representing an enumeration.
+ * @author lukflug
+ */
+public interface EnumSetting {
+ /**
+ * Cycle through the values of the enumeration.
+ */
+ public void increment();
+
+ /**
+ * Get the current value.
+ * @return the name of the current enum value
+ */
+ public String getValueName();
+}
diff --git a/src/minecraft/animeware/util/lukflug/NumberSetting.java b/src/minecraft/animeware/util/lukflug/NumberSetting.java
new file mode 100644
index 0000000..f05e145
--- /dev/null
+++ b/src/minecraft/animeware/util/lukflug/NumberSetting.java
@@ -0,0 +1,38 @@
+package animeware.util.lukflug;
+
+/**
+ * Setting representing an adjustable number.
+ * @author lukflug
+ */
+public interface NumberSetting {
+ /**
+ * Get the number as double.
+ * @return the current setting
+ */
+ public double getNumber();
+
+ /**
+ * Set the number.
+ * @param value the new number
+ */
+ public void setNumber (double value);
+
+ /**
+ * Get the maximum allowed value for the setting.
+ * @return maximum value
+ */
+ public double getMaximumValue();
+
+ /**
+ * Get the minimum allowed value for the setting.
+ * @return minimum value
+ */
+ public double getMinimumValue();
+
+
+ /**
+ * Get the setting's precision.
+ * @return decimal precision
+ */
+ public int getPrecision();
+}
diff --git a/src/minecraft/animeware/util/lukflug/Toggleable.java b/src/minecraft/animeware/util/lukflug/Toggleable.java
new file mode 100644
index 0000000..94b04f2
--- /dev/null
+++ b/src/minecraft/animeware/util/lukflug/Toggleable.java
@@ -0,0 +1,18 @@
+package animeware.util.lukflug;
+
+/**
+ * Interface representing a boolean value that can be toggled.
+ * @author lukflug
+ */
+public interface Toggleable {
+ /**
+ * Toggle the boolean value.
+ */
+ public void toggle();
+
+ /**
+ * Get the boolean value.
+ * @return the value
+ */
+ public boolean isOn();
+}
diff --git a/src/minecraft/animeware/util/misc/Encryption.java b/src/minecraft/animeware/util/misc/Encryption.java
new file mode 100644
index 0000000..8cdf447
--- /dev/null
+++ b/src/minecraft/animeware/util/misc/Encryption.java
@@ -0,0 +1,74 @@
+package animeware.util.misc;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
+import java.util.Base64;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+public class Encryption {
+
+ private static SecretKeySpec keySpec;
+ private static byte[] key;
+
+ public static String hashMD5(String input) {
+ try {
+ MessageDigest md = MessageDigest.getInstance("MD5");
+ md.update(input.getBytes());
+ StringBuilder hexString = new StringBuilder();
+
+ byte[] byteData = md.digest();
+
+ for (byte aByteData : byteData) {
+ String hex = Integer.toHexString(0xff & aByteData);
+ if (hex.length() == 1) hexString.append('0');
+ hexString.append(hex);
+ }
+
+ return hexString.toString();
+ } catch (Exception e) {
+ e.printStackTrace();
+ return "Error";
+ }
+ }
+
+ public static void setKey(String niggakey) {
+ MessageDigest sha = null;
+ try {
+ key = niggakey.getBytes("UTF-8");
+ sha = MessageDigest.getInstance("SHA-1");
+ key = sha.digest(key);
+ key = Arrays.copyOf(key, 16);
+ keySpec = new SecretKeySpec(key, "AES");
+ } catch(NoSuchAlgorithmException | UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static String encrypt(String strToEncrypt, String secret) {
+ try {
+ setKey(secret);
+ Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
+ cipher.init(Cipher.ENCRYPT_MODE, keySpec);
+ return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8")));
+ } catch(Exception e) {
+ System.out.println("Error while encrypting: " + e.toString());
+ }
+ return null;
+ }
+
+ public static String decrypt(String strToDecrypt, String secret) {
+ try {
+ setKey(secret);
+ Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
+ cipher.init(Cipher.DECRYPT_MODE, keySpec);
+ return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
+ } catch(Exception e) {
+ System.out.println("Error while decrypting: " + e.toString());
+ }
+ return null;
+ }
+
+}
diff --git a/src/minecraft/animeware/util/misc/Identification.java b/src/minecraft/animeware/util/misc/Identification.java
new file mode 100644
index 0000000..dff0465
--- /dev/null
+++ b/src/minecraft/animeware/util/misc/Identification.java
@@ -0,0 +1,26 @@
+package animeware.util.misc;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.URL;
+
+public class Identification {
+
+ public static String getHWID() {
+ String hwid = System.getenv("COMPUTERNAME") + System.getProperty("user.name") + System.getProperty("os.name") + System.getenv("PROCESSOR_IDENTIFIER") + System.getenv("PROCESSOR_LEVEL");
+ return Encryption.hashMD5(hwid);
+ }
+
+ public static String getIP() {
+ try {
+ URL ip = new URL("http://checkip.amazonaws.com");
+ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(
+ ip.openStream()));
+ if(bufferedReader.readLine().equals("this would be where quick's or austin's ip was, but i removed it.")) {
+ return "69.420.666.21";
+ } else return bufferedReader.readLine();
+ } catch (Exception e) {
+ return "127.0.0.1";
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/util/misc/RenderUtil.java b/src/minecraft/animeware/util/misc/RenderUtil.java
new file mode 100644
index 0000000..98315c0
--- /dev/null
+++ b/src/minecraft/animeware/util/misc/RenderUtil.java
@@ -0,0 +1,376 @@
+package animeware.util.misc;
+
+import java.awt.Color;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.util.render.ColorUtils;
+import animeware.util.render.GLUtils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.network.NetworkPlayerInfo;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.OpenGlHelper;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.entity.RenderManager;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.Timer;
+
+public class RenderUtil {
+ static final Minecraft mc = Minecraft.getMinecraft();
+
+ public static void drawHead(EntityPlayer player, float x, float y, float w, float h) {
+ NetworkPlayerInfo playerInfo = mc.getNetHandler().getPlayerInfo(player.getUniqueID());
+ if (playerInfo != null) {
+ mc.getTextureManager().bindTexture(playerInfo.getLocationSkin());
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+ Gui.drawScaledCustomSizeModalRect(x, y, 8.0F, 8.0F, 8, 8, w, h, 64.0F, 64.0F);
+ }
+ }
+
+ public static void drawLines(AxisAlignedBB boundingBox) {
+ int i = 3;
+ GL11.glPushMatrix();
+ GL11.glBegin(i);
+ GL11.glVertex3d(boundingBox.minX, boundingBox.minY, boundingBox.minZ);
+ GL11.glVertex3d(boundingBox.maxX, boundingBox.minY, boundingBox.minZ);
+ GL11.glVertex3d(boundingBox.maxX, boundingBox.minY, boundingBox.maxZ);
+ GL11.glVertex3d(boundingBox.minX, boundingBox.minY, boundingBox.maxZ);
+ GL11.glVertex3d(boundingBox.minX, boundingBox.minY, boundingBox.minZ);
+ GL11.glEnd();
+ GL11.glBegin(i);
+ GL11.glVertex3d(boundingBox.minX, boundingBox.maxY, boundingBox.minZ);
+ GL11.glVertex3d(boundingBox.maxX, boundingBox.maxY, boundingBox.minZ);
+ GL11.glVertex3d(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ);
+ GL11.glVertex3d(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ);
+ GL11.glVertex3d(boundingBox.minX, boundingBox.maxY, boundingBox.minZ);
+ GL11.glEnd();
+ GL11.glBegin(1);
+ GL11.glVertex3d(boundingBox.minX, boundingBox.minY, boundingBox.minZ);
+ GL11.glVertex3d(boundingBox.minX, boundingBox.maxY, boundingBox.minZ);
+ GL11.glVertex3d(boundingBox.maxX, boundingBox.minY, boundingBox.minZ);
+ GL11.glVertex3d(boundingBox.maxX, boundingBox.maxY, boundingBox.minZ);
+ GL11.glVertex3d(boundingBox.maxX, boundingBox.minY, boundingBox.maxZ);
+ GL11.glVertex3d(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ);
+ GL11.glVertex3d(boundingBox.minX, boundingBox.minY, boundingBox.maxZ);
+ GL11.glVertex3d(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ);
+ GL11.glEnd();
+ GL11.glPopMatrix();
+ }
+
+ public static void drawBoxFilled(AxisAlignedBB axisAlignedBB) {
+ GL11.glBegin(7);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.minY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.maxY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.minY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.maxY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.minY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.maxY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.minY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.maxY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.maxY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.minY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.maxY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.minY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.maxY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.minY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.maxY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.minY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.minY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.maxY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.minY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.maxY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.minY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.maxY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.minY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.maxY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.maxY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.minY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.maxY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.minY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.maxY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.minY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.maxY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.minY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.minY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.minY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.minY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.minY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.minY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.minY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.minY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.minY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.maxY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.maxY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.maxY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.maxY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.maxY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.maxY, axisAlignedBB.minZ);
+ GL11.glVertex3d(axisAlignedBB.minX, axisAlignedBB.maxY, axisAlignedBB.maxZ);
+ GL11.glVertex3d(axisAlignedBB.maxX, axisAlignedBB.maxY, axisAlignedBB.maxZ);
+ GL11.glEnd();
+ }
+
+ public static void drawPlatform(Entity entity, Color color) {
+ RenderManager renderManager = mc.getRenderManager();
+ Timer timer = mc.timer;
+ double d = entity.lastTickPosX + (entity.posX - entity.lastTickPosX) * timer.renderPartialTicks - renderManager.renderPosX;
+ double d2 = entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * timer.renderPartialTicks - renderManager.renderPosY;
+ double d3 = entity.lastTickPosZ + (entity.posZ - entity.lastTickPosZ) * timer.renderPartialTicks - renderManager.renderPosZ;
+ AxisAlignedBB axisAlignedBB = entity.getEntityBoundingBox().offset(-entity.posX, -entity.posY, -entity.posZ).offset(d, d2, d3);
+ }
+
+ public static void drawCircle(double ballX, double ballY, float radius, int sections, int color) {
+ double dAngle = 6.283185307179586D / sections;
+ GL11.glPushAttrib(8192);
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glEnable(2848);
+ GL11.glLineWidth(2.0F);
+ GL11.glBegin(6);
+ int i;
+ for (i = 0; i < sections; i++) {
+ float x = (float)(radius * Math.sin(i * dAngle));
+ float y = (float)(radius * Math.cos(i * dAngle));
+ ColorUtils.glColor(color);
+ GL11.glVertex2d(ballX + x, ballY + y);
+ }
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+ GL11.glEnd();
+ GL11.glBegin(2);
+ for (i = 0; i < sections; i++) {
+ float x = (float)(radius * Math.sin(i * dAngle));
+ float y = (float)(radius * Math.cos(i * dAngle));
+ ColorUtils.glColor(color);
+ GL11.glVertex2d(ballX + x, ballY + y);
+ }
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+ GL11.glEnd();
+ GL11.glPopAttrib();
+ }
+
+ public static int getRainbow(int x, int y, float saturation) {
+ long l = System.currentTimeMillis() - x * 10L - y * 10L;
+ return Color.HSBtoRGB((float)(l % 6000L) / 6000.0F, saturation, 1.0F);
+ }
+
+ public static void drawFullCircle(float cx, float cy, float r, int c) {
+ r *= 2.0F;
+ cx *= 2.0F;
+ cy *= 2.0F;
+ float theta = 0.19634953F;
+ float p = (float)Math.cos(theta);
+ float s = (float)Math.sin(theta);
+ float x = r;
+ float y = 0.0F;
+ GLUtils.pre2D();
+ GL11.glEnable(2848);
+ GL11.glHint(3154, 4354);
+ GL11.glEnable(3024);
+ GL11.glScalef(0.5F, 0.5F, 0.5F);
+ ColorUtils.glColorInt(c);
+ GL11.glBegin(9);
+ for (int ii = 0; ii < 32; ii++) {
+ GL11.glVertex2f(x + cx, y + cy);
+ float t = x;
+ x = p * x - s * y;
+ y = s * t + p * y;
+ }
+ GL11.glEnd();
+ GL11.glScalef(2.0F, 2.0F, 2.0F);
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ GLUtils.post2D();
+ }
+
+ public static void drawGradient(double x, double y, double x2, double y2, int col1, int col2) {
+ float f = (col1 >> 24 & 0xFF) / 255.0F;
+ float f1 = (col1 >> 16 & 0xFF) / 255.0F;
+ float f2 = (col1 >> 8 & 0xFF) / 255.0F;
+ float f3 = (col1 & 0xFF) / 255.0F;
+ float f4 = (col2 >> 24 & 0xFF) / 255.0F;
+ float f5 = (col2 >> 16 & 0xFF) / 255.0F;
+ float f6 = (col2 >> 8 & 0xFF) / 255.0F;
+ float f7 = (col2 & 0xFF) / 255.0F;
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glEnable(2848);
+ GL11.glShadeModel(7425);
+ GL11.glPushMatrix();
+ GL11.glBegin(7);
+ GL11.glColor4f(f1, f2, f3, f);
+ GL11.glVertex2d(x2, y);
+ GL11.glVertex2d(x, y);
+ GL11.glColor4f(f5, f6, f7, f4);
+ GL11.glVertex2d(x, y2);
+ GL11.glVertex2d(x2, y2);
+ GL11.glEnd();
+ GL11.glPopMatrix();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glShadeModel(7424);
+ }
+
+ public static void drawGradientSideways(double left, double top, double right, double bottom, int col1, int col2) {
+ float f = (col1 >> 24 & 0xFF) / 255.0F;
+ float f1 = (col1 >> 16 & 0xFF) / 255.0F;
+ float f2 = (col1 >> 8 & 0xFF) / 255.0F;
+ float f3 = (col1 & 0xFF) / 255.0F;
+ float f4 = (col2 >> 24 & 0xFF) / 255.0F;
+ float f5 = (col2 >> 16 & 0xFF) / 255.0F;
+ float f6 = (col2 >> 8 & 0xFF) / 255.0F;
+ float f7 = (col2 & 0xFF) / 255.0F;
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glEnable(2848);
+ GL11.glShadeModel(7425);
+ GL11.glPushMatrix();
+ GL11.glBegin(7);
+ GL11.glColor4f(f1, f2, f3, f);
+ GL11.glVertex2d(left, top);
+ GL11.glVertex2d(left, bottom);
+ GL11.glColor4f(f5, f6, f7, f4);
+ GL11.glVertex2d(right, bottom);
+ GL11.glVertex2d(right, top);
+ GL11.glEnd();
+ GL11.glPopMatrix();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glShadeModel(7424);
+ }
+
+ public static void filledBox(AxisAlignedBB boundingBox, int color, boolean shouldColor) {
+ GlStateManager.pushMatrix();
+ float var11 = (color >> 24 & 0xFF) / 255.0F;
+ float var6 = (color >> 16 & 0xFF) / 255.0F;
+ float var7 = (color >> 8 & 0xFF) / 255.0F;
+ float var8 = (color & 0xFF) / 255.0F;
+ WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
+ if (shouldColor)
+ GlStateManager.color(var6, var7, var8, var11);
+ byte draw = 7;
+ worldRenderer.begin(7, DefaultVertexFormats.POSITION_COLOR);
+ worldRenderer.pos(boundingBox.minX, boundingBox.minY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.maxY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.minY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.minY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.minY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ);
+ Tessellator.getInstance().draw();
+ worldRenderer.begin(7, DefaultVertexFormats.POSITION_COLOR);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.minY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.maxY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.minY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.minY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.minY, boundingBox.maxZ);
+ Tessellator.getInstance().draw();
+ worldRenderer.begin(7, DefaultVertexFormats.POSITION_COLOR);
+ worldRenderer.pos(boundingBox.minX, boundingBox.maxY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.maxY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.minZ);
+ Tessellator.getInstance().draw();
+ worldRenderer.begin(7, DefaultVertexFormats.POSITION_COLOR);
+ worldRenderer.pos(boundingBox.minX, boundingBox.minY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.minY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.minY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.minY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.minY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.minY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.minY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.minY, boundingBox.minZ);
+ Tessellator.getInstance().draw();
+ worldRenderer.begin(7, DefaultVertexFormats.POSITION_COLOR);
+ worldRenderer.pos(boundingBox.minX, boundingBox.minY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.maxY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.minY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.minY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.minY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.minZ);
+ Tessellator.getInstance().draw();
+ worldRenderer.begin(7, DefaultVertexFormats.POSITION_COLOR);
+ worldRenderer.pos(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.minY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.maxY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.minX, boundingBox.minY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.minY, boundingBox.minZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ);
+ worldRenderer.pos(boundingBox.maxX, boundingBox.minY, boundingBox.maxZ);
+ Tessellator.getInstance().draw();
+ GlStateManager.depthMask(true);
+ GlStateManager.popMatrix();
+ }
+
+ public static void drawOutlinedBoundingBox1(AxisAlignedBB boundingBox) {
+ Tessellator var1 = Tessellator.getInstance();
+ WorldRenderer var2 = var1.getWorldRenderer();
+ var2.begin(3, DefaultVertexFormats.POSITION_COLOR);
+ var2.pos(boundingBox.minX, boundingBox.minY, boundingBox.minZ);
+ var2.pos(boundingBox.maxX, boundingBox.minY, boundingBox.minZ);
+ var2.pos(boundingBox.maxX, boundingBox.minY, boundingBox.maxZ);
+ var2.pos(boundingBox.minX, boundingBox.minY, boundingBox.maxZ);
+ var2.pos(boundingBox.minX, boundingBox.minY, boundingBox.minZ);
+ var1.draw();
+ var2.begin(3, DefaultVertexFormats.POSITION_COLOR);
+ var2.pos(boundingBox.minX, boundingBox.maxY, boundingBox.minZ);
+ var2.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.minZ);
+ var2.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ);
+ var2.pos(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ);
+ var2.pos(boundingBox.minX, boundingBox.maxY, boundingBox.minZ);
+ var1.draw();
+ var2.begin(1, DefaultVertexFormats.POSITION_COLOR);
+ var2.pos(boundingBox.minX, boundingBox.minY, boundingBox.minZ);
+ var2.pos(boundingBox.minX, boundingBox.maxY, boundingBox.minZ);
+ var2.pos(boundingBox.maxX, boundingBox.minY, boundingBox.minZ);
+ var2.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.minZ);
+ var2.pos(boundingBox.maxX, boundingBox.minY, boundingBox.maxZ);
+ var2.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ);
+ var2.pos(boundingBox.minX, boundingBox.minY, boundingBox.maxZ);
+ var2.pos(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ);
+ var1.draw();
+ }
+
+ public static void drawRect(float x, float y, float x1, float y1) {
+ GL11.glBegin(7);
+ GL11.glVertex2f(x, y1);
+ GL11.glVertex2f(x1, y1);
+ GL11.glVertex2f(x1, y);
+ GL11.glVertex2f(x, y);
+ GL11.glEnd();
+ }
+
+ public static void draw2DImage(ResourceLocation image, float x, float y, float width, float height, Color c) {
+ GL11.glDisable(2929);
+ GL11.glEnable(3042);
+ GL11.glDepthMask(false);
+ OpenGlHelper.glBlendFunc(770, 771, 1, 0);
+ GL11.glColor4f(c.getRed() / 255.0F, c.getGreen() / 255.0F, c.getBlue() / 255.0F, c.getAlpha());
+ Minecraft.getMinecraft().getTextureManager().bindTexture(image);
+ Gui.drawModalRectWithCustomSizedTexture(x, y, 0.0F, 0.0F, width, height, width, height);
+ GL11.glDepthMask(true);
+ GL11.glDisable(3042);
+ GL11.glEnable(2929);
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+ }
+}
diff --git a/src/minecraft/animeware/util/misc/Timer.java b/src/minecraft/animeware/util/misc/Timer.java
new file mode 100644
index 0000000..3760dd3
--- /dev/null
+++ b/src/minecraft/animeware/util/misc/Timer.java
@@ -0,0 +1,36 @@
+package animeware.util.misc;
+
+import net.minecraft.client.Minecraft;
+
+public class Timer {
+
+ public long lastMS = System.currentTimeMillis();
+
+ public void reset() {
+ lastMS = System.currentTimeMillis();
+ }
+
+ public boolean hasTimeElapsed(long time, boolean reset) {
+ if (System.currentTimeMillis() - lastMS > time) {
+ if (reset)
+ reset();
+
+
+ return true;
+ }
+
+ return false;
+ }
+
+ public long getTime() {
+ return System.currentTimeMillis() - lastMS;
+ }
+
+ public void setTime(long time) {
+ lastMS = time;
+ }
+
+ public void mcTimeSpeed(double speed) {
+ Minecraft.getMinecraft().timer.timerSpeed = (float) speed;
+ }
+}
diff --git a/src/minecraft/animeware/util/misc/WebhookUtil.java b/src/minecraft/animeware/util/misc/WebhookUtil.java
new file mode 100644
index 0000000..41d3afb
--- /dev/null
+++ b/src/minecraft/animeware/util/misc/WebhookUtil.java
@@ -0,0 +1,105 @@
+package animeware.util.misc;
+
+
+import javax.imageio.ImageIO;
+
+import net.minecraft.client.Minecraft;
+
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.*;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class WebhookUtil {
+
+ public static Minecraft mc = Minecraft.getMinecraft();
+
+
+ public static void sendMessage(String message) {
+ PrintWriter out = null;
+ BufferedReader in = null;
+ StringBuilder result = new StringBuilder();
+ try {
+ URL realUrl = new URL("https://discord.com/api/webhooks/817096267472568361/fb45M-IZIc3B0caOAuRaaBZWrwVQypRq-r_y7qfrEEDB8QDCbPOrByCDRaZ9NWbjbuR4");
+ URLConnection conn = realUrl.openConnection();
+ conn.setRequestProperty("accept", "*/*");
+ conn.setRequestProperty("connection", "Keep-Alive");
+ conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
+ conn.setDoOutput(true);
+ conn.setDoInput(true);
+ out = new PrintWriter(conn.getOutputStream());
+ String postData = URLEncoder.encode("content", "UTF-8") + "=" + URLEncoder.encode(message, "UTF-8");
+ out.print(postData);
+ out.flush();
+ in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
+ String line;
+ while ((line = in.readLine()) != null) {
+ result.append("/n").append(line);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ if (out != null) {
+ out.close();
+ }
+ if (in != null) {
+ in.close();
+ }
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ }
+ System.out.println(result.toString());
+ }
+ public static void sendFlag(String message) {
+ PrintWriter out = null;
+ BufferedReader in = null;
+ StringBuilder result = new StringBuilder();
+ try {
+ URL realUrl = new URL("https://discord.com/api/webhooks/814991711281086495/Z3yrGUHHTgm4ui6tAE5QIizWTE09l26YGebHwEH-0-8Fz-MgrgsYiNJzD0ysIHybgo2g");
+ URLConnection conn = realUrl.openConnection();
+ conn.setRequestProperty("accept", "*/*");
+ conn.setRequestProperty("connection", "Keep-Alive");
+ conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
+ conn.setDoOutput(true);
+ conn.setDoInput(true);
+ out = new PrintWriter(conn.getOutputStream());
+ String postData = URLEncoder.encode("content", "UTF-8") + "=" + URLEncoder.encode(message, "UTF-8");
+ out.print(postData);
+ out.flush();
+ in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
+ String line;
+ while ((line = in.readLine()) != null) {
+ result.append("/n").append(line);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ if (out != null) {
+ out.close();
+ }
+ if (in != null) {
+ in.close();
+ }
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ }
+ System.out.println(result.toString());
+ }
+
+}
diff --git a/src/minecraft/animeware/util/notification/Notification.java b/src/minecraft/animeware/util/notification/Notification.java
new file mode 100644
index 0000000..a3b66f7
--- /dev/null
+++ b/src/minecraft/animeware/util/notification/Notification.java
@@ -0,0 +1,151 @@
+package animeware.util.notification;
+
+import java.awt.Color;
+
+import animeware.NightSky;
+import animeware.hud.mod.HudMod;
+import animeware.util.font.FontUtil;
+import animeware.util.font.MinecraftFontRenderer;
+import animeware.util.misc.Timer;
+import animeware.util.render.AnimationUtil;
+import animeware.util.render.DrawUtil;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+
+public class Notification {
+ private NotificationType type;
+ private String title;
+ private String messsage;
+ private ResourceLocation icon;
+ private long start;
+ HudMod m;
+
+ private long fadedIn;
+ private long fadeOut;
+ public long end;
+
+ public Timer timer = new Timer();
+
+
+ public Notification(NotificationType type, String title, String messsage, ResourceLocation icon, int length) {
+ this.type = type;
+ this.title = title;
+ this.messsage = messsage;
+ this.icon = icon;
+
+ timer.reset();
+ end = (long) (NightSky.INSTANCE.hudManager.notifs.time.getValue() * 1000);
+ }
+
+ public void show() {
+ start = System.currentTimeMillis();
+ }
+
+ public boolean isShown() {
+ return getTime() <= end;
+ }
+
+ long getTime() {
+ return System.currentTimeMillis() - start;
+ }
+
+ public void render(int count) {
+ Minecraft mc = Minecraft.getMinecraft();
+ ScaledResolution sr = new ScaledResolution(mc);
+ //FontRenderer fr = Monsoon.INSTANCE.getFont();
+ MinecraftFontRenderer fr = getSelectedFont();
+ int width = 120;
+ double offset = width;
+ int height = 0;
+ long time = getTime();
+ float barThickness = 3;
+
+ Color color = new Color(0, 0, 0, 200);
+ Color color1 = new Color(0, 140, 255);
+
+ if (type == NotificationType.INFO) {
+ color1 = new Color(255, 255, 255);
+ }
+ else if (type == NotificationType.WARNING)
+ color1 = new Color(255, 255, 0);
+ else if (type == NotificationType.ERROR) {
+ color1 = new Color(204, 0, 18);
+ int i = Math.max(0, Math.min(255, (int) (Math.sin(time / 100.0) * 255.0 / 2 + 127.5)));
+ color = new Color(i, 0, 0, 220);
+ }
+ else if (type == NotificationType.SUCCESS) {
+ color1 = new Color(0, 200, 200);
+ }
+ else if (type == NotificationType.FAIL) {
+ color1 = new Color(200, 0, 0);
+ }
+
+ double x = sr.getScaledWidth() - 45 - fr.getStringWidth(messsage),
+ y = sr.getScaledHeight() - 47 * count + 2,
+ w = sr.getScaledWidth() - 5,
+ h = 30;
+
+ float health = timer.getTime();
+ double hpPercentage = health / end;
+ hpPercentage = MathHelper.clamp_double(hpPercentage, 0.0, 1.0);
+ final double hpWidth = (45 + fr.getStringWidth(messsage)) * hpPercentage;
+ double progress = AnimationUtil.INSTANCE.animate(hpWidth, 5, end / 1000);
+
+
+ //if(!m.getIcon().getResourcePath().equals("")) {
+ //DrawUtil.draw2DImageDouble(m.getIcon(), x + 5, y + 5, 25, 25, Color.WHITE);
+ //}
+ //if(HudMod m : NightSky.INSTANCE.hudManager.hudMods)
+
+
+ Gui.drawRect(x, y, w, y + h, color.getRGB());
+
+ //Gui.drawRect(x + 2, y + 3, x + 24, y + 24, -1);
+
+ Gui.drawRect(x, y + 30, x + progress, y + 28, color1.getRGB());
+
+ fr.drawStringWithShadow(title,(float) x + 28, (float) y + 5, -1);
+ fr.drawStringWithShadow(messsage, (float) x + 28, (float) y + 15, -1);
+ DrawUtil.draw2DImageFloat(icon, (float) x - 1, (float) y - 1, 31, 30, Color.WHITE);
+
+ if (type == NotificationType.INFO) {
+
+ DrawUtil.drawBorderedRoundedRect((float) x +4, (float) y +5, (float) x + 22, (float) y + 22, 19, 2, -1, new Color(0,0,0,0).getRGB());
+ //mc.fontRendererObj.drawString("i", x + 12.5f, y + 9.5f, new Color(0,0,0,255).getRGB());
+
+ } else if (type == NotificationType.WARNING) {
+
+ // DrawUtil.drawRoundedRect((float) x + 2, (float) y + 3, (float) x + 24, (float) y + 24, 19, new Color(255,255,0,255).getRGB());
+ //mc.fontRendererObj.drawString("\u26A0", x + 12.5f, y + 9.5f, new Color(255,255,0,255).getRGB());
+
+ } else if (type == NotificationType.ERROR) {
+
+ //mc.fontRendererObj.drawString("\u26A0", x + 10f, y + 9.5f, new Color(204,0,18,255).getRGB());
+
+ } else if (type == NotificationType.SUCCESS) {
+
+ //DrawUtil.drawRoundedRect((float) x + 2, (float) y + 3, (float) x + 24, (float) y + 24, 19, new Color(0,255,0,255).getRGB());
+ //mc.fontRendererObj.drawString("\u2714", x + 9.5f, y + 9.5f, new Color(0,255,0,255).getRGB());
+
+ } else if (type == NotificationType.FAIL) {
+ // DrawUtil.drawRoundedRect((float) x + 2, (float) y + 3, (float) x + 24, (float) y + 24, 19, new Color(255,0,0,255).getRGB());
+ //mc.fontRendererObj.drawString("\u2716", x + 9, y + 9, new Color(255,0,0,255).getRGB());
+ }
+ }
+
+ private static MinecraftFontRenderer getSelectedFont() {
+ switch (NightSky.INSTANCE.hudManager.notifs.font.getMode()) {
+ case "Monsoon":
+ return FontUtil.normal;
+ case "Moon":
+ return FontUtil.normal;
+ }
+ return FontUtil.normal;
+ }
+
+
+
+}
diff --git a/src/minecraft/animeware/util/notification/NotificationManager.java b/src/minecraft/animeware/util/notification/NotificationManager.java
new file mode 100644
index 0000000..8032753
--- /dev/null
+++ b/src/minecraft/animeware/util/notification/NotificationManager.java
@@ -0,0 +1,28 @@
+package animeware.util.notification;
+
+
+import java.util.concurrent.LinkedBlockingQueue;
+
+public class NotificationManager {
+ public static LinkedBlockingQueue pendingNotifications = new LinkedBlockingQueue<>();
+ public static Notification currentNotification = null;
+
+ public static void show(Notification notification) {
+ pendingNotifications.add(notification);
+ }
+
+ public static void update() {
+ pendingNotifications.removeIf(notif -> notif.timer.hasTimeElapsed(notif.end, false));
+ }
+
+ public static void render() {
+ update();
+
+ int count = 0;
+
+ for(Notification notif : pendingNotifications) {
+ count++;
+ notif.render(count);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/util/notification/NotificationType.java b/src/minecraft/animeware/util/notification/NotificationType.java
new file mode 100644
index 0000000..11bb3c4
--- /dev/null
+++ b/src/minecraft/animeware/util/notification/NotificationType.java
@@ -0,0 +1,5 @@
+package animeware.util.notification;
+
+public enum NotificationType {
+ INFO, WARNING, ERROR, SUCCESS, FAIL;
+}
diff --git a/src/minecraft/animeware/util/render/AnimatedResourceLocation.java b/src/minecraft/animeware/util/render/AnimatedResourceLocation.java
new file mode 100644
index 0000000..e3ec84f
--- /dev/null
+++ b/src/minecraft/animeware/util/render/AnimatedResourceLocation.java
@@ -0,0 +1,65 @@
+package animeware.util.render;
+
+import net.minecraft.util.ResourceLocation;
+
+public class AnimatedResourceLocation {
+
+ private final String folder;
+ protected final int frames;
+ protected final int fpt;
+
+ protected int currentTick = 0;
+ protected int currentFrame = 0;
+
+ protected ResourceLocation[] textures;
+
+ public AnimatedResourceLocation(String folder, int frames, int fpt) {
+ this(folder, frames, fpt, false);
+ }
+
+ public AnimatedResourceLocation(String folder, int frames, int fpt, boolean reverse) {
+ this.folder = folder;
+ this.frames = frames;
+ this.fpt = fpt;
+ textures = new ResourceLocation[frames];
+
+ for(int i = 0; i < frames; i++) {
+ if(reverse) {
+ textures[i] = new ResourceLocation(folder + "/" + (textures.length - i) + ".png");
+ }
+ else {
+ textures[i] = new ResourceLocation(folder + "/" + i + ".png");
+ }
+ }
+
+ }
+
+
+ public ResourceLocation getTexture() {
+ return textures[currentFrame];
+ }
+
+ public int getCurrentFrame() {
+ return currentFrame;
+ }
+
+ public void update() {
+ if(currentTick > fpt) {
+ currentTick = 0;
+ currentFrame++;
+ if(currentFrame > frames - 1) {
+ currentFrame = 0;
+ }
+ }
+ currentTick++;
+ }
+
+ public void setCurrentFrame(int currentFrame) {
+ this.currentFrame = currentFrame;
+ }
+
+ public int getFrames() {
+ return frames;
+ }
+
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/util/render/AnimationUtil.java b/src/minecraft/animeware/util/render/AnimationUtil.java
new file mode 100644
index 0000000..2d487c1
--- /dev/null
+++ b/src/minecraft/animeware/util/render/AnimationUtil.java
@@ -0,0 +1,57 @@
+package animeware.util.render;
+
+public enum AnimationUtil {
+
+ INSTANCE;
+
+ public float calculateCompensation(float target, float current, long delta, int speed) {
+ float diff = current - target;
+ if (delta < 1L) {
+ delta = 1L;
+ }
+
+ double xD;
+ if (diff > (float) speed) {
+ xD = (double) ((long) speed * delta / 16L) < 0.25D ? 0.5D : (double) ((long) speed * delta / 16L);
+ current = (float) ((double) current - xD);
+ if (current < target) {
+ current = target;
+ }
+ } else if (diff < (float) (-speed)) {
+ xD = (double) ((long) speed * delta / 16L) < 0.25D ? 0.5D : (double) ((long) speed * delta / 16L);
+ current = (float) ((double) current + xD);
+ if (current > target) {
+ current = target;
+ }
+ } else {
+ current = target;
+ }
+
+ return current;
+ }
+
+ public double animate(final double target, double current, double speed) {
+ final boolean larger = target > current;
+ if (speed < 0.0) {
+ speed = 0.0;
+ } else if (speed > 1.0) {
+ speed = 1.0;
+ }
+ final double dif = Math.max(target, current) - Math.min(target, current);
+ double factor = dif * speed;
+ if (factor < 0.1) {
+ factor = 0.1;
+ }
+ if (larger) {
+ current += factor;
+ } else {
+ current -= factor;
+ }
+ return current;
+ }
+
+ public float value(long startTime) {
+ return Math.min(1.0F, (float) Math.pow((double) (System.currentTimeMillis() - startTime) / 10.0D, 1.4D) / 80.0F);
+ }
+
+}
diff --git a/src/minecraft/animeware/util/render/ChromaText.java b/src/minecraft/animeware/util/render/ChromaText.java
new file mode 100644
index 0000000..bf72926
--- /dev/null
+++ b/src/minecraft/animeware/util/render/ChromaText.java
@@ -0,0 +1,22 @@
+/* */ package animeware.util.render;
+/* */
+/* */ import java.awt.Color;
+/* */ import net.minecraft.client.Minecraft;
+/* */
+/* */
+/* */ public class ChromaText
+/* */ {
+/* */ public static void drawChromaString(String string, int x, int y, boolean shadow) {
+/* 10 */ Minecraft mc = Minecraft.getMinecraft();
+/* */
+/* 12 */ int xTmp = x; byte b; int i; char[] arrayOfChar;
+/* 13 */ for (i = (arrayOfChar = string.toCharArray()).length, b = 0; b < i; ) { char textChar = arrayOfChar[b];
+/* 14 */ long l = System.currentTimeMillis() - (xTmp * 10 - y * 10);
+/* 15 */ int j = Color.HSBtoRGB((float)(l % 2000L) / 2000.0F, 0.8F, 0.8F);
+/* 16 */ String tmp = String.valueOf(textChar);
+/* 17 */ mc.fontRendererObj.drawString(tmp, xTmp, y, j, shadow);
+/* 18 */ xTmp += mc.fontRendererObj.getCharWidth(textChar);
+/* */ b++; }
+/* */
+/* */ }
+/* */ }
diff --git a/src/minecraft/animeware/util/render/ColorMode.java b/src/minecraft/animeware/util/render/ColorMode.java
new file mode 100644
index 0000000..c522fed
--- /dev/null
+++ b/src/minecraft/animeware/util/render/ColorMode.java
@@ -0,0 +1,74 @@
+package animeware.util.render;
+
+import java.awt.Color;
+
+public class ColorMode {
+
+ public static boolean mode = false;
+
+ public static boolean getMode() {
+ return mode;
+ }
+
+ public static void setMode(boolean mode) {
+ ColorMode.mode = mode;
+ }
+
+ public static void toggleMode() {
+ setMode(!mode);
+ }
+
+ public static int getBgColor() {
+ if(mode) {
+ return new Color(90, 90, 90, 180).getRGB();
+ }
+ if(!mode) {
+ return new Color(0, 0, 0, 150).getRGB();
+ } else {
+ return -1;
+ }
+ }
+ public static int getModColor() {
+ if(mode) {
+ return new Color(111, 111, 111, 255).getRGB();
+ }
+ if(!mode) {
+ return new Color(0, 0, 0, 255).getRGB();
+ } else {
+ return -1;
+ }
+ }
+ public static int getClickGuiColor() {
+ return new Color(25, 25, 25, 255).getRGB();
+ }
+ public static int getClickGuiInnerColor() {
+ return new Color(50, 50, 50, 255).getRGB();
+ }
+ public static int getClickGuiMidColor() {
+ return new Color(35, 35, 35, 255).getRGB();
+ }
+ public static int getLoginColor() {
+ return new Color(0, 0, 0, 70).getRGB();
+ }
+ public static int getWhiteColor() {
+ return new Color(255, 255, 255, 255).getRGB();
+ }
+ public static int getRedColor() {
+ return new Color(200, 0, 0, 0).getRGB();
+ }
+ public static int getBGColor() {
+ return new Color(200, 200, 200, 100).getRGB();
+ }
+ public static int getDarkColor() {
+ return new Color(0, 0, 0, 170).getRGB();
+ }
+ public static int getMidDarkColor() {
+ return new Color(0, 0, 0, 80).getRGB();
+ }
+ public static int getSettingButtonAqua() {
+ return new Color(0, 200, 230, 255).getRGB();
+ }
+ public static int getSettingButtonAquaInside() {
+ return new Color(0, 140, 180, 255).getRGB();
+ }
+}
diff --git a/src/minecraft/animeware/util/render/ColorUtil.java b/src/minecraft/animeware/util/render/ColorUtil.java
new file mode 100644
index 0000000..1502ea8
--- /dev/null
+++ b/src/minecraft/animeware/util/render/ColorUtil.java
@@ -0,0 +1,260 @@
+package animeware.util.render;
+
+import java.awt.Color;
+import java.awt.image.BufferedImage;
+
+import animeware.util.MathUtils;
+
+public class ColorUtil {
+
+ public static int getRainbow(float seconds, float saturation, float brightness) {
+ float hue = (System.currentTimeMillis() % (int)(seconds * 1000)) / (float)(seconds * 4000f);
+ int color = Color.HSBtoRGB(hue, saturation, brightness);
+ return color;
+ }
+
+ public static int getRGB(float seconds, float saturation, float brightness, long index) {
+ float hue = ((System.currentTimeMillis() + index) % (int)(seconds * 1000)) / (float)(seconds * 1000);
+ int color = Color.HSBtoRGB(hue, saturation, brightness);
+ return color;
+ }
+
+ public static Color astolfo(int index, int speed, float saturation, float brightness, float opacity) {
+ int angle = (int) ((System.currentTimeMillis() / speed + index) % 360);
+ angle = (angle > 180 ? 360 - angle : angle) + 180;
+ float hue = angle / 360f;
+
+ int color = Color.HSBtoRGB(brightness, saturation, hue);
+ Color obj = new Color(color);
+ return new Color(obj.getRed(), obj.getGreen(), obj.getBlue(), Math.max(0, Math.min(255, (int) (opacity * 255))));
+ }
+ public static Color interpolateColorC(Color color1, Color color2, float amount) {
+ amount = Math.min(1, Math.max(0, amount));
+ return new Color(MathUtils.interpolateInt(color1.getRed(), color2.getRed(), amount),
+ MathUtils.interpolateInt(color1.getGreen(), color2.getGreen(), amount),
+ MathUtils.interpolateInt(color1.getBlue(), color2.getBlue(), amount),
+ MathUtils.interpolateInt(color1.getAlpha(), color2.getAlpha(), amount));
+ }
+ public static Color interpolateColorsBackAndForth(int speed, int index, Color start, Color end, boolean trueColor) {
+ int angle = (int) (((System.currentTimeMillis()) / speed + index) % 360);
+ angle = (angle >= 180 ? 360 - angle : angle) * 2;
+ return trueColor ? ColorUtil.interpolateColorHue(start, end, angle / 360f) : ColorUtil.interpolateColorC(start, end, angle / 360f);
+ }
+ public static Color interpolateColorHue(Color color1, Color color2, float amount) {
+ amount = Math.min(1, Math.max(0, amount));
+
+ float[] color1HSB = Color.RGBtoHSB(color1.getRed(), color1.getGreen(), color1.getBlue(), null);
+ float[] color2HSB = Color.RGBtoHSB(color2.getRed(), color2.getGreen(), color2.getBlue(), null);
+
+ Color resultColor = Color.getHSBColor(MathUtils.interpolateFloat(color1HSB[0], color2HSB[0], amount),
+ MathUtils.interpolateFloat(color1HSB[1], color2HSB[1], amount), MathUtils.interpolateFloat(color1HSB[2], color2HSB[2], amount));
+
+ return new Color(resultColor.getRed(), resultColor.getGreen(), resultColor.getBlue(),
+ MathUtils.interpolateInt(color1.getAlpha(), color2.getAlpha(), amount));
+ }
+ public static Color[] getAnalogousColor(Color color) {
+ Color[] colors = new Color[2];
+ float[] hsb = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), null);
+
+ float degree = 30 / 360f;
+
+ float newHueAdded = hsb[0] + degree;
+ colors[0] = new Color(Color.HSBtoRGB(newHueAdded, hsb[1], hsb[2]));
+
+ float newHueSubtracted = hsb[0] - degree;
+
+ colors[1] = new Color(Color.HSBtoRGB(newHueSubtracted, hsb[1], hsb[2]));
+
+ return colors;
+ }
+
+
+ //RGB TO HSL AND HSL TO RGB FOUND HERE: https://gist.github.com/mjackson/5311256
+ public static Color hslToRGB(float[] hsl) {
+ float red, green, blue;
+
+ if (hsl[1] == 0) {
+ red = green = blue = 1;
+ } else {
+ float q = hsl[2] < .5 ? hsl[2] * (1 + hsl[1]) : hsl[2] + hsl[1] - hsl[2] * hsl[1];
+ float p = 2 * hsl[2] - q;
+
+ red = hueToRGB(p, q, hsl[0] + 1 / 3f);
+ green = hueToRGB(p, q, hsl[0]);
+ blue = hueToRGB(p, q, hsl[0] - 1 / 3f);
+ }
+
+ red *= 255;
+ green *= 255;
+ blue *= 255;
+
+ return new Color((int) red, (int) green, (int) blue);
+ }
+
+
+ public static float hueToRGB(float p, float q, float t) {
+ float newT = t;
+ if (newT < 0) newT += 1;
+ if (newT > 1) newT -= 1;
+ if (newT < 1 / 6f) return p + (q - p) * 6 * newT;
+ if (newT < .5f) return q;
+ if (newT < 2 / 3f) return p + (q - p) * (2 / 3f - newT) * 6;
+ return p;
+ }
+
+ public static float[] rgbToHSL(Color rgb) {
+ float red = rgb.getRed() / 255f;
+ float green = rgb.getGreen() / 255f;
+ float blue = rgb.getBlue() / 255f;
+
+ float max = Math.max(Math.max(red, green), blue);
+ float min = Math.min(Math.min(red, green), blue);
+ float c = (max + min) / 2f;
+ float[] hsl = new float[]{c, c, c};
+
+ if (max == min) {
+ hsl[0] = hsl[1] = 0;
+ } else {
+ float d = max - min;
+ hsl[1] = hsl[2] > .5 ? d / (2 - max - min) : d / (max + min);
+
+ if (max == red) {
+ hsl[0] = (green - blue) / d + (green < blue ? 6 : 0);
+ } else if (max == blue) {
+ hsl[0] = (blue - red) / d + 2;
+ } else if (max == green) {
+ hsl[0] = (red - green) / d + 4;
+ }
+ hsl[0] /= 6;
+ }
+ return hsl;
+ }
+
+
+ public static Color imitateTransparency(Color backgroundColor, Color accentColor, float percentage) {
+ return new Color(ColorUtil.interpolateColor(backgroundColor, accentColor, (255 * percentage) / 255));
+ }
+
+ public static int applyOpacity(int color, float opacity) {
+ Color old = new Color(color);
+ return applyOpacity(old, opacity).getRGB();
+ }
+
+ //Opacity value ranges from 0-1
+ public static Color applyOpacity(Color color, float opacity) {
+ opacity = Math.min(1, Math.max(0, opacity));
+ return new Color(color.getRed(), color.getGreen(), color.getBlue(), (int) (color.getAlpha() * opacity));
+ }
+
+ public static Color darker(Color color, float FACTOR) {
+ return new Color(Math.max((int) (color.getRed() * FACTOR), 0),
+ Math.max((int) (color.getGreen() * FACTOR), 0),
+ Math.max((int) (color.getBlue() * FACTOR), 0),
+ color.getAlpha());
+ }
+
+ public static Color brighter(Color color, float FACTOR) {
+ int r = color.getRed();
+ int g = color.getGreen();
+ int b = color.getBlue();
+ int alpha = color.getAlpha();
+
+ /* From 2D group:
+ * 1. black.brighter() should return grey
+ * 2. applying brighter to blue will always return blue, brighter
+ * 3. non pure color (non zero rgb) will eventually return white
+ */
+ int i = (int) (1.0 / (1.0 - FACTOR));
+ if (r == 0 && g == 0 && b == 0) {
+ return new Color(i, i, i, alpha);
+ }
+ if (r > 0 && r < i) r = i;
+ if (g > 0 && g < i) g = i;
+ if (b > 0 && b < i) b = i;
+
+ return new Color(Math.min((int) (r / FACTOR), 255),
+ Math.min((int) (g / FACTOR), 255),
+ Math.min((int) (b / FACTOR), 255),
+ alpha);
+ }
+
+ /**
+ * This method gets the average color of an image
+ * performance of this goes as O((width * height) / step)
+ */
+ public static Color averageColor(BufferedImage bi, int width, int height, int pixelStep) {
+ int[] color = new int[3];
+ for (int x = 0; x < width; x += pixelStep) {
+ for (int y = 0; y < height; y += pixelStep) {
+ Color pixel = new Color(bi.getRGB(x, y));
+ color[0] += pixel.getRed();
+ color[1] += pixel.getGreen();
+ color[2] += pixel.getBlue();
+ }
+ }
+ int num = (width * height) / (pixelStep * pixelStep);
+ return new Color(color[0] / num, color[1] / num, color[2] / num);
+ }
+
+ public static Color rainbow(int speed, int index, float saturation, float brightness, float opacity) {
+ int angle = (int) ((System.currentTimeMillis() / speed + index) % 360);
+ float hue = angle / 360f;
+ Color color = new Color(Color.HSBtoRGB(hue, saturation, brightness));
+ return new Color(color.getRed(), color.getGreen(), color.getBlue(), Math.max(0, Math.min(255, (int) (opacity * 255))));
+ }
+
+
+
+ //The next few methods are for interpolating colors
+ public static int interpolateColor(Color color1, Color color2, float amount) {
+ amount = Math.min(1, Math.max(0, amount));
+ return interpolateColorC(color1, color2, amount).getRGB();
+ }
+
+ public static int interpolateColor(int color1, int color2, float amount) {
+ amount = Math.min(1, Math.max(0, amount));
+ Color cColor1 = new Color(color1);
+ Color cColor2 = new Color(color2);
+ return interpolateColorC(cColor1, cColor2, amount).getRGB();
+ }
+
+
+
+
+ //Fade a color in and out with a specified alpha value ranging from 0-1
+ public static Color fade(int speed, int index, Color color, float alpha) {
+ float[] hsb = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), null);
+ int angle = (int) ((System.currentTimeMillis() / speed + index) % 360);
+ angle = (angle > 180 ? 360 - angle : angle) + 180;
+
+ Color colorHSB = new Color(Color.HSBtoRGB(hsb[0], hsb[1], angle / 360f));
+
+ return new Color(colorHSB.getRed(), colorHSB.getGreen(), colorHSB.getBlue(), Math.max(0, Math.min(255, (int) (alpha * 255))));
+ }
+
+
+ private static float getAnimationEquation(int index, int speed) {
+ int angle = (int) ((System.currentTimeMillis() / speed + index) % 360);
+ return ((angle > 180 ? 360 - angle : angle) + 180) / 360f;
+ }
+
+ public static int[] createColorArray(int color) {
+ return new int[]{bitChangeColor(color, 16), bitChangeColor(color, 8), bitChangeColor(color, 0), bitChangeColor(color, 24)};
+ }
+
+ public static int getOppositeColor(int color) {
+ int R = bitChangeColor(color, 0);
+ int G = bitChangeColor(color, 8);
+ int B = bitChangeColor(color, 16);
+ int A = bitChangeColor(color, 24);
+ R = 255 - R;
+ G = 255 - G;
+ B = 255 - B;
+ return R + (G << 8) + (B << 16) + (A << 24);
+ }
+
+ private static int bitChangeColor(int color, int bitChange) {
+ return (color >> bitChange) & 255;
+ }
+
+}
diff --git a/src/minecraft/animeware/util/render/ColorUtils.java b/src/minecraft/animeware/util/render/ColorUtils.java
new file mode 100644
index 0000000..3c4810b
--- /dev/null
+++ b/src/minecraft/animeware/util/render/ColorUtils.java
@@ -0,0 +1,126 @@
+package animeware.util.render;
+
+import java.awt.Color;
+import java.util.concurrent.atomic.AtomicInteger;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import org.lwjgl.opengl.GL11;
+
+public class ColorUtils {
+ static Minecraft mc = Minecraft.getMinecraft();
+
+ static FontRenderer fr = mc.fontRendererObj;
+
+ public static void glColor(int hex) {
+ float alpha = (hex >> 24 & 0xFF) / 255.0F;
+ float red = (hex >> 16 & 0xFF) / 255.0F;
+ float green = (hex >> 8 & 0xFF) / 255.0F;
+ float blue = (hex & 0xFF) / 255.0F;
+ GL11.glColor4f(red, green, blue, alpha);
+ }
+
+ public static Color getColor(int red, int green, int blue, int alpha) {
+ int color = 0;
+ color |= alpha << 24;
+ color |= red << 16;
+ color |= green << 8;
+ color |= blue;
+ return new Color(red, green, blue, alpha);
+ }
+
+ public static int astolfoColors(int yOffset, int yTotal) {
+ float speed = 2900.0F;
+ float hue = (float)(System.currentTimeMillis() % (int)speed) + ((yTotal - yOffset) * 9);
+ while (hue > speed)
+ hue -= speed;
+ hue /= speed;
+ if (hue > 0.5D)
+ hue = 0.5F - hue - 0.5F;
+ hue += 0.5F;
+ return Color.HSBtoRGB(hue, 0.5F, 1.0F);
+ }
+
+ public static int astolfoColors(int yOffset, int yTotal, long index) {
+ float speed = 10000.0F;
+ float hue = (float)((System.currentTimeMillis() + index) % (int)speed) + ((yTotal - yOffset) * 9);
+ while (hue > speed)
+ hue -= speed;
+ hue /= speed;
+ if (hue > 0.5D)
+ hue = 0.5F - hue - 0.5F;
+ hue += 0.5F;
+ return Color.HSBtoRGB(hue, 0.6F, 1.0F);
+ }
+
+ public static int rainbowWawe(int delay) {
+ AtomicInteger ColorIndex = new AtomicInteger();
+ int clrd = ColorIndex.get() / delay;
+ ColorIndex.getAndIncrement();
+ return rainbowColor(clrd);
+ }
+
+ public static int rainbowStatic(int delay) {
+ return rainbowColor(delay);
+ }
+
+ public static int rainbowColor(int delay) {
+ double rainbowState = Math.ceil(((System.currentTimeMillis() + delay) / 10L));
+ rainbowState %= 360.0D;
+ return Color.getHSBColor((float)(rainbowState / 360.0D), 1.0F, 1.0F).getRGB();
+ }
+
+ public static Color rainbowColor2(int delay) {
+ double rainbowState = Math.ceil(((System.currentTimeMillis() + delay) / 40L));
+ rainbowState %= 360.0D;
+ return Color.getHSBColor((float)(rainbowState / 360.0D), 1.0F, 1.0F);
+ }
+
+ public static void glColor(Color color) {
+ GL11.glColor4f(color.getRed() / 255.0F, color.getGreen() / 255.0F, color.getBlue() / 255.0F, color.getAlpha() / 255.0F);
+ }
+
+ public static void glColorInt(int hex) {
+ float alpha = (hex >> 24 & 0xFF) / 255.0F;
+ float red = (hex >> 16 & 0xFF) / 255.0F;
+ float green = (hex >> 8 & 0xFF) / 255.0F;
+ float blue = (hex & 0xFF) / 255.0F;
+ GL11.glColor4f(red, green, blue, alpha);
+ }
+
+ public static Color transition(Color c1, Color c2, double prog) {
+ double progress = (prog > 1.0D) ? 1.0D : ((prog < 0.0D) ? 0.0D : prog);
+ int redDiff = c1.getRed() - c2.getRed();
+ int greenDiff = c1.getGreen() - c2.getGreen();
+ int blueDiff = c1.getBlue() - c2.getBlue();
+ int alphaDiff = c1.getAlpha() - c2.getAlpha();
+ int newRed = (int)(c2.getRed() + redDiff * progress);
+ int newGreen = (int)(c2.getGreen() + greenDiff * progress);
+ int newBlue = (int)(c2.getBlue() + blueDiff * progress);
+ int newAlpha = (int)(c2.getAlpha() + alphaDiff * progress);
+ return new Color(newRed, newGreen, newBlue, newAlpha);
+ }
+
+ public static Color getColorFromInt(int col1) {
+ float f = (col1 >> 24 & 0xFF) / 255.0F;
+ float f1 = (col1 >> 16 & 0xFF) / 255.0F;
+ float f2 = (col1 >> 8 & 0xFF) / 255.0F;
+ return new Color(f, f1, f2);
+ }
+
+ public static void drawChromaString(String string, int x, int y, boolean shadow) {
+ Minecraft mc = Minecraft.getMinecraft();
+ int xTmp = x;
+ byte b;
+ int i;
+ char[] arrayOfChar;
+ for (i = (arrayOfChar = string.toCharArray()).length, b = 0; b < i; ) {
+ char textChar = arrayOfChar[b];
+ long l = System.currentTimeMillis() - (xTmp * 10 - y * 10);
+ int j = Color.HSBtoRGB((float)(l % 2000L) / 2000.0F, 0.8F, 0.8F);
+ String tmp = String.valueOf(textChar);
+ mc.fontRendererObj.drawString(tmp, xTmp, y, j, shadow);
+ xTmp += mc.fontRendererObj.getCharWidth(textChar);
+ b++;
+ }
+ }
+}
diff --git a/src/minecraft/animeware/util/render/DrawUtil.java b/src/minecraft/animeware/util/render/DrawUtil.java
new file mode 100644
index 0000000..f930a49
--- /dev/null
+++ b/src/minecraft/animeware/util/render/DrawUtil.java
@@ -0,0 +1,167 @@
+package animeware.util.render;
+
+import org.lwjgl.opengl.GL11;
+import java.awt.Color;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.OpenGlHelper;
+import net.minecraft.client.renderer.RenderHelper;
+import net.minecraft.client.renderer.entity.RenderManager;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.util.ResourceLocation;
+
+public class DrawUtil extends GuiScreen {
+
+ public static DrawUtil instance = new DrawUtil();
+ public static void drawRoundedRect(double x, double y, double x1, double y1, double radius, int color) {
+ GL11.glPushAttrib(0);
+ GL11.glScaled(0.5D, 0.5D, 0.5D);
+ x *= 2.0D;
+ y *= 2.0D;
+ x1 *= 2.0D;
+ y1 *= 2.0D;
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ setColor(color);
+ GL11.glEnable(2848);
+ GL11.glBegin(9);
+ int i;
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d(x + radius + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, y + radius + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d(x + radius + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, y1 - radius + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d(x1 - radius + Math.sin(i * Math.PI / 180.0D) * radius, y1 - radius + Math.cos(i * Math.PI / 180.0D) * radius);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d(x1 - radius + Math.sin(i * Math.PI / 180.0D) * radius, y + radius + Math.cos(i * Math.PI / 180.0D) * radius);
+ GL11.glEnd();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glDisable(3042);
+ GL11.glEnable(3553);
+ GL11.glScaled(2.0D, 2.0D, 2.0D);
+ GL11.glPopAttrib();
+ }
+
+ public static void drawBorderedRoundedRect(float x, float y, float x1, float y1, float borderSize, int borderC, int insideC) {
+ drawRoundedRect(x, y, x1, y1, borderSize, borderC);
+ drawRoundedRect((x + 0.5F), (y + 0.5F), (x1 - 0.5F), (y1 - 0.5F), borderSize, insideC);
+ }
+
+ public static void drawBorderedRoundedRect(float x, float y, float x1, float y1, float radius, float borderSize, int borderC, int insideC) {
+ drawRoundedRect(x, y, x1, y1, radius, borderC);
+ drawRoundedRect((x + borderSize), (y + borderSize), (x1 - borderSize), (y1 - borderSize), radius, insideC);
+ }
+
+ public static void setColor(int color) {
+ float a = (color >> 24 & 0xFF) / 255.0F;
+ float r = (color >> 16 & 0xFF) / 255.0F;
+ float g = (color >> 8 & 0xFF) / 255.0F;
+ float b = (color & 0xFF) / 255.0F;
+ GL11.glColor4f(r, g, b, a);
+ }
+
+ public static void drawEntityOnScreen(int posX, int posY, int scale, float rotation, EntityLivingBase ent)
+ {
+ float rY = ent.rotationYaw % 360;
+ float rYH = ent.rotationYawHead % 360;
+ float rYO = ent.renderYawOffset;
+ ent.rotationYawHead = rotation + rYH - rYO;
+ ent.rotationYaw = rotation;
+ ent.renderYawOffset = rotation;
+ GlStateManager.enableColorMaterial();
+ GlStateManager.pushMatrix();
+ GlStateManager.translate((float)posX, (float)posY, 50.0F);
+ GlStateManager.scale((float)(-scale), (float)scale, (float)scale);
+ GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F);
+ GlStateManager.rotate(135.0F, 0.0F, 1.0F, 0.0F);
+ RenderHelper.enableStandardItemLighting();
+ GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F);
+ GlStateManager.translate(0.0F, 0.0F, 0.0F);
+ RenderManager rendermanager = Minecraft.getMinecraft().getRenderManager();
+ rendermanager.setPlayerViewY(180.0F);
+ rendermanager.setRenderShadow(false);
+ rendermanager.renderEntityWithPosYaw(ent, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F);
+ rendermanager.setRenderShadow(true);
+ GlStateManager.popMatrix();
+ RenderHelper.disableStandardItemLighting();
+ GlStateManager.disableRescaleNormal();
+ GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit);
+ GlStateManager.disableTexture2D();
+ GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
+ ent.rotationYaw = rY;
+ ent.rotationYawHead = rYH;
+ ent.renderYawOffset = rYO;
+ }
+
+ public void drawPlayerHead(int x, int y, int width) {
+ GlStateManager.pushMatrix();
+ float scale = width / 32;
+ GlStateManager.scale(scale, scale, scale);
+ Minecraft.getMinecraft().getTextureManager().bindTexture(Minecraft.getMinecraft().thePlayer.getLocationSkin());
+ GL11.glEnable(GL11.GL_BLEND);
+ this.drawTexturedModalRect(x / scale, y / scale, 32, 32, 32, 32);
+ GL11.glDisable(GL11.GL_BLEND);
+ GlStateManager.popMatrix();
+ }
+ public static void draw2DImageColor(ResourceLocation image, int x, int y, int width, int height, int i) {
+ GL11.glDisable(GL11.GL_DEPTH_TEST);
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glDepthMask(false);
+ OpenGlHelper.glBlendFunc(770, 771, 1, 0);
+ //GL11.glColor4f(i.getRed() / 255f, i.getGreen() / 255f, i.getBlue() / 255f, i.getAlpha());
+ Minecraft.getMinecraft().getTextureManager().bindTexture(image);
+ Gui.drawModalRectWithCustomSizedTexture(x, y, 0.0F, 0.0F, width, height, width, height);
+ GL11.glDepthMask(true);
+ GL11.glDisable(GL11.GL_BLEND);
+ GL11.glEnable(GL11.GL_DEPTH_TEST);
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+ }
+ public static void draw2DImage(ResourceLocation image, int x, int y, int width, int height, Color c) {
+ GL11.glDisable(GL11.GL_DEPTH_TEST);
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glDepthMask(false);
+ OpenGlHelper.glBlendFunc(770, 771, 1, 0);
+ GL11.glColor4f(c.getRed() / 255f, c.getGreen() / 255f, c.getBlue() / 255f, c.getAlpha());
+ Minecraft.getMinecraft().getTextureManager().bindTexture(image);
+ Gui.drawModalRectWithCustomSizedTexture(x, y, 0.0F, 0.0F, width, height, width, height);
+ GL11.glDepthMask(true);
+ GL11.glDisable(GL11.GL_BLEND);
+ GL11.glEnable(GL11.GL_DEPTH_TEST);
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+
+ }
+ public static void draw2DImageFloat(ResourceLocation image, float f, float g, int width, int height, Color c) {
+ GL11.glDisable(GL11.GL_DEPTH_TEST);
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glDepthMask(false);
+ OpenGlHelper.glBlendFunc(770, 771, 1, 0);
+ GL11.glColor4f(c.getRed() / 255f, c.getGreen() / 255f, c.getBlue() / 255f, c.getAlpha());
+ Minecraft.getMinecraft().getTextureManager().bindTexture(image);
+ Gui.drawModalRectWithCustomSizedTexture(f, g, 0.0F, 0.0F, width, height, width, height);
+ GL11.glDepthMask(true);
+ GL11.glDisable(GL11.GL_BLEND);
+ GL11.glEnable(GL11.GL_DEPTH_TEST);
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+ }
+
+public static void draw2DImageDouble(ResourceLocation image, double x, double y, int width, int height, Color c) {
+ GL11.glDisable(GL11.GL_DEPTH_TEST);
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glDepthMask(false);
+ OpenGlHelper.glBlendFunc(770, 771, 1, 0);
+ GL11.glColor4f(c.getRed() / 255f, c.getGreen() / 255f, c.getBlue() / 255f, c.getAlpha());
+ Minecraft.getMinecraft().getTextureManager().bindTexture(image);
+ Gui.drawModalRectWithCustomSizedTextureDouble(x, y, 0.0F, 0.0F, width, height, width, height);
+ GL11.glDepthMask(true);
+ GL11.glDisable(GL11.GL_BLEND);
+ GL11.glEnable(GL11.GL_DEPTH_TEST);
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+
+}
+
+}
diff --git a/src/minecraft/animeware/util/render/GLUtils.java b/src/minecraft/animeware/util/render/GLUtils.java
new file mode 100644
index 0000000..fb55bb4
--- /dev/null
+++ b/src/minecraft/animeware/util/render/GLUtils.java
@@ -0,0 +1,73 @@
+package animeware.util.render;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.renderer.GlStateManager;
+
+import org.lwjgl.opengl.GL11;
+import static org.lwjgl.opengl.GL11.*;
+import static org.lwjgl.opengl.GL11.GL_TEXTURE_2D;
+
+public class GLUtils {
+ public static void pre2D() {
+ GL11.glDisable(2929);
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glDepthMask(true);
+ GL11.glEnable(2848);
+ GL11.glHint(3154, 4354);
+ GL11.glHint(3155, 4354);
+ }
+
+ public static void post2D() {
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glEnable(2929);
+ GL11.glDisable(2848);
+ GL11.glHint(3154, 4352);
+ GL11.glHint(3155, 4352);
+ }
+
+ public static void pre3D() {
+ GL11.glPushMatrix();
+ GL11.glEnable(3042);
+ GL11.glBlendFunc(770, 771);
+ GL11.glShadeModel(7425);
+ GL11.glDisable(3553);
+ GL11.glEnable(2848);
+ GL11.glDisable(2929);
+ GL11.glDisable(2896);
+ GL11.glDepthMask(false);
+ GL11.glHint(3154, 4354);
+ }
+
+ public static void post3D() {
+ GL11.glDepthMask(true);
+ GL11.glEnable(2929);
+ GL11.glDisable(2848);
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+ }
+
+ public static void makeScissorBox(float x, float y, float x2, float y2) {
+ ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
+ int factor = scaledResolution.getScaleFactor();
+ GL11.glScissor((int)(x * factor), (int)((scaledResolution.getScaledHeight() - y2) * factor), (int)((x2 - x) * factor), (int)((y2 - y) * factor));
+ }
+ public static void render(int mode, Runnable render){
+ glBegin(mode);
+ render.run();
+ glEnd();
+ }
+ public static void setup2DRendering(Runnable f) {
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glDisable(GL_TEXTURE_2D);
+ f.run();
+ glEnable(GL_TEXTURE_2D);
+ GlStateManager.disableBlend();
+ }
+}
diff --git a/src/minecraft/animeware/util/render/GradientUtil.java b/src/minecraft/animeware/util/render/GradientUtil.java
new file mode 100644
index 0000000..bb4a87a
--- /dev/null
+++ b/src/minecraft/animeware/util/render/GradientUtil.java
@@ -0,0 +1,98 @@
+package animeware.util.render;
+
+import java.awt.Color;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.util.Utils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.renderer.GlStateManager;
+
+public class GradientUtil implements Utils {
+
+ private static final ShaderUtil gradientMaskShader = new ShaderUtil("Tenacity/Shaders/gradientMask.frag");
+ private static final ShaderUtil gradientShader = new ShaderUtil("Tenacity/Shaders/gradient.frag");
+
+
+
+ public static void drawGradient(float x, float y, float width, float height, float alpha, Color bottomLeft, Color topLeft, Color bottomRight, Color topRight) {
+ ScaledResolution sr = new ScaledResolution(mc);
+
+ RenderUtil.resetColor();
+ GlStateManager.enableBlend();
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ gradientShader.init();
+ gradientShader.setUniformf("location", x * sr.getScaleFactor(), (Minecraft.getMinecraft().displayHeight - (height * sr.getScaleFactor())) - (y * sr.getScaleFactor()));
+ gradientShader.setUniformf("rectSize", width * sr.getScaleFactor(), height * sr.getScaleFactor());
+ gradientShader.setUniformf("alpha", alpha);
+ // Bottom Left
+ gradientShader.setUniformf("color1", bottomLeft.getRed() / 255f, bottomLeft.getGreen() / 255f, bottomLeft.getBlue() / 255f);
+ //Top left
+ gradientShader.setUniformf("color2", topLeft.getRed() / 255f, topLeft.getGreen() / 255f, topLeft.getBlue() / 255f);
+ //Bottom Right
+ gradientShader.setUniformf("color3", bottomRight.getRed() / 255f, bottomRight.getGreen() / 255f, bottomRight.getBlue() / 255f);
+ //Top Right
+ gradientShader.setUniformf("color4", topRight.getRed() / 255f, topRight.getGreen() / 255f, topRight.getBlue() / 255f);
+
+ //Apply the gradient to whatever is put here
+ ShaderUtil.drawQuads(x, y, width, height);
+
+ gradientShader.unload();
+ GlStateManager.disableBlend();
+ }
+
+ public static void drawGradientLR(float x, float y, float width, float height, float alpha, Color left, Color right) {
+ drawGradient(x, y, width, height, alpha, left, left, right, right);
+ }
+
+ public static void drawGradientTB(float x, float y, float width, float height, float alpha, Color top, Color bottom) {
+ drawGradient(x, y, width, height, alpha, bottom, top, bottom, top);
+ }
+
+
+ public static void applyGradientHorizontal(float x, float y, float width, float height, float alpha, Color left, Color right, Runnable content) {
+ applyGradient(x, y, width, height, alpha, left, left, right, right, content);
+ }
+
+ public static void applyGradientVertical(float x, float y, float width, float height, float alpha, Color top, Color bottom, Runnable content) {
+ applyGradient(x, y, width, height, alpha, bottom, top, bottom, top, content);
+ }
+
+
+ public static void applyGradientCornerRL(float x, float y, float width, float height, float alpha, Color bottomLeft, Color topRight, Runnable content) {
+ Color mixedColor = ColorUtil.interpolateColorC(topRight, bottomLeft, .5f);
+ applyGradient(x, y, width, height, alpha, bottomLeft, mixedColor, mixedColor, topRight, content);
+ }
+
+ public static void applyGradient(float x, float y, float width, float height, float alpha, Color bottomLeft, Color topLeft, Color bottomRight, Color topRight, Runnable content) {
+ RenderUtil.resetColor();
+ GlStateManager.enableBlend();
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ gradientMaskShader.init();
+
+ ScaledResolution sr = new ScaledResolution(mc);
+
+ gradientMaskShader.setUniformf("location", x * sr.getScaleFactor(), (Minecraft.getMinecraft().displayHeight - (height * sr.getScaleFactor())) - (y * sr.getScaleFactor()));
+ gradientMaskShader.setUniformf("rectSize", width * sr.getScaleFactor(), height * sr.getScaleFactor());
+ gradientMaskShader.setUniformf("alpha", alpha);
+ gradientMaskShader.setUniformi("tex", 0);
+ // Bottom Left
+ gradientMaskShader.setUniformf("color1", bottomLeft.getRed() / 255f, bottomLeft.getGreen() / 255f, bottomLeft.getBlue() / 255f);
+ //Top left
+ gradientMaskShader.setUniformf("color2", topLeft.getRed() / 255f, topLeft.getGreen() / 255f, topLeft.getBlue() / 255f);
+ //Bottom Right
+ gradientMaskShader.setUniformf("color3", bottomRight.getRed() / 255f, bottomRight.getGreen() / 255f, bottomRight.getBlue() / 255f);
+ //Top Right
+ gradientMaskShader.setUniformf("color4", topRight.getRed() / 255f, topRight.getGreen() / 255f, topRight.getBlue() / 255f);
+
+ //Apply the gradient to whatever is put here
+ content.run();
+
+ gradientMaskShader.unload();
+ GlStateManager.disableBlend();
+
+ }
+
+
+}
diff --git a/src/minecraft/animeware/util/render/GuiUtils.java b/src/minecraft/animeware/util/render/GuiUtils.java
new file mode 100644
index 0000000..40d0865
--- /dev/null
+++ b/src/minecraft/animeware/util/render/GuiUtils.java
@@ -0,0 +1,469 @@
+package animeware.util.render;
+
+import java.awt.Color;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.texture.ITextureObject;
+import net.minecraft.client.renderer.texture.SimpleTexture;
+import net.minecraft.client.renderer.texture.TextureAtlasSprite;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.util.ResourceLocation;
+import org.lwjgl.opengl.GL11;
+
+public class GuiUtils {
+ static final Minecraft mc = Minecraft.getMinecraft();
+
+ static final FontRenderer fr = mc.fontRendererObj;
+
+ public static Color brandingForegroundColor = new Color(255, 255, 255, 30),
+ brandingForegroundOutline = new Color(255, 255, 255, 150),
+ brandingBackgroundColor = new Color(0, 0, 0, 100),
+ brandingSecondBackgroundColor =new Color(175, 175, 175, 26),
+ brandingIconColor = new Color(255, 255, 255, 150),
+
+ brandingEnabledColor = new Color(101, 220, 138, 200),
+ brandingDisabledColor = new Color(248, 92, 92, 200);
+
+ public static void drawChromaString(String string, int x, int y, boolean shadow) {
+ int xTmp = x;
+ for (char textChar : string.toCharArray()) {
+ long l = System.currentTimeMillis() - (xTmp * 10 - y * 10);
+ int i = Color.HSBtoRGB((float)(l % 2000L) / 2000.0F, 0.8F, 0.8F);
+ String tmp = String.valueOf(textChar);
+ mc.fontRendererObj.drawString(tmp, xTmp, y, i, shadow);
+ xTmp += mc.fontRendererObj.getCharWidth(textChar);
+ }
+ }
+
+ public static int chromaColor() {
+ int i = Color.HSBtoRGB((float)(System.currentTimeMillis() % 2000L) / 2000.0F, 0.8F, 0.8F);
+ return i;
+ }
+
+
+
+
+
+
+
+ public static void enableGL2D() {
+ GL11.glDisable(2929);
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glDepthMask(true);
+ GL11.glEnable(2848);
+ GL11.glHint(3154, 4354);
+ GL11.glHint(3155, 4354);
+ }
+
+ public static void disableGL2D() {
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glEnable(2929);
+ GL11.glDisable(2848);
+ GL11.glHint(3154, 4352);
+ GL11.glHint(3155, 4352);
+ }
+
+ public static void bindTexture(ResourceLocation resourceLocation) {
+ ITextureObject texture = Minecraft.getMinecraft().getTextureManager().getTexture(resourceLocation);
+ if (texture == null) {
+ texture = new SimpleTexture(resourceLocation);
+ Minecraft.getMinecraft().getTextureManager().loadTexture(resourceLocation, texture);
+ }
+ GL11.glBindTexture(3553, texture.getGlTextureId());
+ }
+
+ public static void drawTexture(ResourceLocation resourceLocation, float x, float y, float width, float height) {
+ GL11.glPushMatrix();
+ float size = width / 2.0f;
+ GL11.glEnable(3042);
+ GL11.glEnable(3553);
+ GL11.glEnable(2848);
+ GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+ GuiUtils.bindTexture(resourceLocation);
+ GL11.glBegin(7);
+ GL11.glTexCoord2d(0.0f / size, 0.0f / size);
+ GL11.glVertex2d(x, y);
+ GL11.glTexCoord2d(0.0f / size, (0.0f + size) / size);
+ GL11.glVertex2d(x, y + height);
+ GL11.glTexCoord2d((0.0f + size) / size, (0.0f + size) / size);
+ GL11.glVertex2d(x + width, y + height);
+ GL11.glTexCoord2d((0.0f + size) / size, 0.0f / size);
+ GL11.glVertex2d(x + width, y);
+ GL11.glEnd();
+ GL11.glEnable(3553);
+ GL11.glDisable(2848);
+ GL11.glDisable(3042);
+ GL11.glPopMatrix();
+ }
+
+
+ public static void drawSmoothRoundedRect(float x, float y, float x1, float y1, float radius, int color) {
+ GL11.glPushAttrib(0);
+ GL11.glScaled(0.5D, 0.5D, 0.5D);
+ x = (float)(x * 2.0D);
+ y = (float)(y * 2.0D);
+ x1 = (float)(x1 * 2.0D);
+ y1 = (float)(y1 * 2.0D);
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glEnable(2848);
+ setColor(color);
+ GL11.glEnable(2848);
+ GL11.glBegin(9);
+ int i;
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ GL11.glEnd();
+ GL11.glBegin(2);
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ GL11.glEnd();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glEnable(3553);
+ GL11.glScaled(2.0D, 2.0D, 2.0D);
+ GL11.glPopAttrib();
+ }
+
+ public static void drawRoundedRect(float x, float y, float x1, float y1, float radius, int color) {
+ GL11.glPushAttrib(0);
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+ GL11.glScaled(0.5D, 0.5D, 0.5D);
+ x = (float)(x * 2.0D);
+ y = (float)(y * 2.0D);
+ x1 = (float)(x1 * 2.0D);
+ y1 = (float)(y1 * 2.0D);
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glEnable(2848);
+ setColor(color);
+ GL11.glEnable(2848);
+ GL11.glBegin(9);
+ int i;
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ GL11.glEnd();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glEnable(3553);
+ GL11.glScaled(2.0D, 2.0D, 2.0D);
+ GL11.glPopAttrib();
+ }
+
+ public static void drawRoundedOutline(float x, float y, float x1, float y1, float radius, float lineWidth, int color) {
+ GL11.glPushAttrib(0);
+ GL11.glScaled(0.5D, 0.5D, 0.5D);
+ x = (float)(x * 2.0D);
+ y = (float)(y * 2.0D);
+ x1 = (float)(x1 * 2.0D);
+ y1 = (float)(y1 * 2.0D);
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ setColor(color);
+ GL11.glEnable(2848);
+ GL11.glLineWidth(lineWidth);
+ GL11.glBegin(2);
+ int i;
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ GL11.glEnd();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glDisable(3042);
+ GL11.glEnable(3553);
+ GL11.glScaled(2.0D, 2.0D, 2.0D);
+ GL11.glPopAttrib();
+ }
+
+ public static void drawSelectRoundedRect(float x, float y, float x1, float y1, float radius1, float radius2, float radius3, float radius4, int color) {
+ GL11.glPushAttrib(0);
+ GL11.glScaled(0.5D, 0.5D, 0.5D);
+ x = (float)(x * 2.0D);
+ y = (float)(y * 2.0D);
+ x1 = (float)(x1 * 2.0D);
+ y1 = (float)(y1 * 2.0D);
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ setColor(color);
+ GL11.glEnable(2848);
+ GL11.glBegin(9);
+ int i;
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x + radius1) + Math.sin(i * Math.PI / 180.0D) * radius1 * -1.0D, (y + radius1) + Math.cos(i * Math.PI / 180.0D) * radius1 * -1.0D);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x + radius2) + Math.sin(i * Math.PI / 180.0D) * radius2 * -1.0D, (y1 - radius2) + Math.cos(i * Math.PI / 180.0D) * radius2 * -1.0D);
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x1 - radius3) + Math.sin(i * Math.PI / 180.0D) * radius3, (y1 - radius3) + Math.cos(i * Math.PI / 180.0D) * radius3);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x1 - radius4) + Math.sin(i * Math.PI / 180.0D) * radius4, (y + radius4) + Math.cos(i * Math.PI / 180.0D) * radius4);
+ GL11.glEnd();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glDisable(3042);
+ GL11.glEnable(3553);
+ GL11.glScaled(2.0D, 2.0D, 2.0D);
+ GL11.glPopAttrib();
+ }
+
+
+
+ public static void drawSelectRoundedOutline(float x, float y, float x1, float y1, float radius1, float radius2, float radius3, float radius4, float lineWidth, int color) {
+ GL11.glPushAttrib(0);
+ GL11.glScaled(0.5D, 0.5D, 0.5D);
+ x = (float)(x * 2.0D);
+ y = (float)(y * 2.0D);
+ x1 = (float)(x1 * 2.0D);
+ y1 = (float)(y1 * 2.0D);
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ setColor(color);
+ GL11.glEnable(2848);
+ GL11.glLineWidth(lineWidth);
+ GL11.glBegin(2);
+ int i;
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x + radius1) + Math.sin(i * Math.PI / 180.0D) * radius1 * -1.0D, (y + radius1) + Math.cos(i * Math.PI / 180.0D) * radius1 * -1.0D);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x + radius2) + Math.sin(i * Math.PI / 180.0D) * radius2 * -1.0D, (y1 - radius2) + Math.cos(i * Math.PI / 180.0D) * radius2 * -1.0D);
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x1 - radius3) + Math.sin(i * Math.PI / 180.0D) * radius3, (y1 - radius3) + Math.cos(i * Math.PI / 180.0D) * radius3);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x1 - radius4) + Math.sin(i * Math.PI / 180.0D) * radius4, (y + radius4) + Math.cos(i * Math.PI / 180.0D) * radius4);
+ GL11.glEnd();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glDisable(3042);
+ GL11.glEnable(3553);
+ GL11.glScaled(2.0D, 2.0D, 2.0D);
+ GL11.glPopAttrib();
+ }
+
+ public static void setColor(int color) {
+ float a = (color >> 24 & 0xFF) / 255.0F;
+ float r = (color >> 16 & 0xFF) / 255.0F;
+ float g = (color >> 8 & 0xFF) / 255.0F;
+ float b = (color & 0xFF) / 255.0F;
+ GL11.glColor4f(r, g, b, a);
+ }
+
+ public static void drawRoundedGradientRectCorner(float x, float y, float x1, float y1, float radius, int color, int color2, int color3, int color4) {
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glEnable(2848);
+ GL11.glShadeModel(7425);
+ GL11.glPushAttrib(0);
+ GL11.glScaled(0.5D, 0.5D, 0.5D);
+ x = (float)(x * 2.0D);
+ y = (float)(y * 2.0D);
+ x1 = (float)(x1 * 2.0D);
+ y1 = (float)(y1 * 2.0D);
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ setColor(color);
+ GL11.glEnable(2848);
+ GL11.glShadeModel(7425);
+ GL11.glBegin(9);
+ int i;
+ for (i = 0; i <= 90; i += 3)
+ setColor(color);
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 90; i <= 180; i += 3)
+ setColor(color2);
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 0; i <= 90; i += 3)
+ setColor(color3);
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ for (i = 90; i <= 180; i += 3)
+ setColor(color4);
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ GL11.glEnd();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glDisable(3042);
+ GL11.glEnable(3553);
+ GL11.glScaled(2.0D, 2.0D, 2.0D);
+ GL11.glPopAttrib();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glShadeModel(7424);
+ }
+
+
+
+ public static int glToRGB(float red, float green, float blue, float alpha) {
+ return (new Color((int)red * 255, (int)green * 255, (int)blue * 255, (int)alpha * 255)).getRGB();
+ }
+
+ public static float rgbToGl(int rgb) {
+ return rgb / 255.0F;
+ }
+
+ public static void setGlColor(int color) {
+ float alpha = (color >> 24 & 0xFF) / 255.0F;
+ float red = (color >> 16 & 0xFF) / 255.0F;
+ float green = (color >> 8 & 0xFF) / 255.0F;
+ float blue = (color & 0xFF) / 255.0F;
+ GlStateManager.color(red, green, blue, alpha);
+ }
+
+ public static void setGlColor(int color, float alpha) {
+ float red = (color >> 16 & 0xFF) / 255.0F;
+ float green = (color >> 8 & 0xFF) / 255.0F;
+ float blue = (color & 0xFF) / 255.0F;
+ GlStateManager.color(red, green, blue, alpha);
+ }
+
+ public static int getRGB(int color, int alpha) {
+ return (new Color(color >> 16 & 0xFF, color >> 8 & 0xFF, color & 0xFF, alpha)).getRGB();
+ }
+
+ public static Color getColor(int color) {
+ return new Color(color, true);
+ }
+
+ public static int getAlpha(int color) {
+ return color >> 24 & 0xFF;
+ }
+
+ public static int hsvToRgb(int hue, int saturation, int value) {
+ float m;
+ hue %= 360;
+ float s = saturation / 100.0F;
+ float v = value / 100.0F;
+ float c = v * s;
+ float h = hue / 60.0F;
+ float x = c * (1.0F - Math.abs(h % 2.0F - 1.0F));
+ float r = 0.0F;
+ float g = 0.0F;
+ float b = 0.0F;
+ switch (hue / 60) {
+ case 0:
+ r = c;
+ g = x;
+ b = 0.0F;
+ m = v - c;
+ return (int)((r + m) * 255.0F) << 16 | (int)((g + m) * 255.0F) << 8 | (int)((b + m) * 255.0F);
+ case 1:
+ r = x;
+ g = c;
+ b = 0.0F;
+ m = v - c;
+ return (int)((r + m) * 255.0F) << 16 | (int)((g + m) * 255.0F) << 8 | (int)((b + m) * 255.0F);
+ case 2:
+ r = 0.0F;
+ g = c;
+ b = x;
+ m = v - c;
+ return (int)((r + m) * 255.0F) << 16 | (int)((g + m) * 255.0F) << 8 | (int)((b + m) * 255.0F);
+ case 3:
+ r = 0.0F;
+ g = x;
+ b = c;
+ m = v - c;
+ return (int)((r + m) * 255.0F) << 16 | (int)((g + m) * 255.0F) << 8 | (int)((b + m) * 255.0F);
+ case 4:
+ r = x;
+ g = 0.0F;
+ b = c;
+ m = v - c;
+ return (int)((r + m) * 255.0F) << 16 | (int)((g + m) * 255.0F) << 8 | (int)((b + m) * 255.0F);
+ case 5:
+ r = c;
+ g = 0.0F;
+ b = x;
+ m = v - c;
+ return (int)((r + m) * 255.0F) << 16 | (int)((g + m) * 255.0F) << 8 | (int)((b + m) * 255.0F);
+ }
+ return 0;
+ }
+
+ public static int[] rgbToHsv(int rgb) {
+ float h, r = ((rgb & 0xFF0000) >> 16) / 255.0F;
+ float g = ((rgb & 0xFF00) >> 8) / 255.0F;
+ float b = (rgb & 0xFF) / 255.0F;
+ float M = (r > g) ? Math.max(r, b) : Math.max(g, b);
+ float m = (r < g) ? Math.min(r, b) : Math.min(g, b);
+ float c = M - m;
+ if (M == r) {
+ for (h = (g - b) / c; h < 0.0F; h += 6.0F);
+ h %= 6.0F;
+ } else if (M == g) {
+ h = (b - r) / c + 2.0F;
+ } else {
+ h = (r - g) / c + 4.0F;
+ }
+ h *= 60.0F;
+ float s = c / M;
+ return new int[] { (c == 0.0F) ? -1 : (int)h, (int)(s * 100.0F), (int)(M * 100.0F) };
+ }
+
+ public static int getIntermediateColor(int a, int b, float percent) {
+ float avgRed = (a >> 16 & 0xFF) * percent + (b >> 16 & 0xFF) * (1.0F - percent);
+ float avgGreen = (a >> 8 & 0xFF) * percent + (b >> 8 & 0xFF) * (1.0F - percent);
+ float avgBlue = (a >> 0 & 0xFF) * percent + (b >> 0 & 0xFF) * (1.0F - percent);
+ float avgAlpha = (a >> 24 & 0xFF) * percent + (b >> 24 & 0xFF) * (1.0F - percent);
+ try {
+ return (new Color(avgRed / 255.0F, avgGreen / 255.0F, avgBlue / 255.0F, avgAlpha / 255.0F)).getRGB();
+ } catch (IllegalArgumentException e) {
+ return Integer.MIN_VALUE;
+ }
+ }
+
+ public static int convertPercentToValue(float percent) {
+ return (int)(percent * 255.0F);
+ }
+
+ public static void scissorHelper(int x1, int y1, int x2, int y2) {
+ x2 -= x1;
+ y2 -= y1;
+ Minecraft mc = Minecraft.getMinecraft();
+ ScaledResolution resolution = new ScaledResolution(mc);
+ GL11.glScissor(x1 * resolution.getScaleFactor(), mc.displayHeight - y1 * resolution
+ .getScaleFactor() - y2 * resolution.getScaleFactor(), x2 * resolution
+ .getScaleFactor(), y2 * resolution
+ .getScaleFactor());
+ }
+}
diff --git a/src/minecraft/animeware/util/render/JColor.java b/src/minecraft/animeware/util/render/JColor.java
new file mode 100644
index 0000000..c4a26f1
--- /dev/null
+++ b/src/minecraft/animeware/util/render/JColor.java
@@ -0,0 +1,61 @@
+package animeware.util.render;
+
+import java.awt.Color;
+
+import net.minecraft.client.renderer.GlStateManager;
+
+/**
+* @author lukflug
+*/
+// this is taken from gs from a while ago lol
+
+public class JColor extends Color {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public JColor (int rgb) {
+ super(rgb);
+ }
+
+ public JColor (int rgba, boolean hasalpha) {
+ super(rgba,hasalpha);
+ }
+
+ public JColor (int r, int g, int b) {
+ super(r,g,b);
+ }
+
+ public JColor (int r, int g, int b, int a) {
+ super(r,g,b,a);
+ }
+
+ public JColor (Color color) {
+ super(color.getRed(),color.getGreen(),color.getBlue(),color.getAlpha());
+ }
+
+ public JColor (JColor color, int a) {
+ super(color.getRed(),color.getGreen(),color.getBlue(),a);
+ }
+
+ public static JColor fromHSB (float hue, float saturation, float brightness) {
+ return new JColor(Color.getHSBColor(hue,saturation,brightness));
+ }
+
+ public float getHue() {
+ return RGBtoHSB(getRed(),getGreen(),getBlue(),null)[0];
+ }
+
+ public float getSaturation() {
+ return RGBtoHSB(getRed(),getGreen(),getBlue(),null)[1];
+ }
+
+ public float getBrightness() {
+ return RGBtoHSB(getRed(),getGreen(),getBlue(),null)[2];
+ }
+
+ public void glColor() {
+ GlStateManager.color(getRed()/255.0f,getGreen()/255.0f,getBlue()/255.0f,getAlpha()/255.0f);
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/util/render/RenderUtil.java b/src/minecraft/animeware/util/render/RenderUtil.java
new file mode 100644
index 0000000..8fc9a80
--- /dev/null
+++ b/src/minecraft/animeware/util/render/RenderUtil.java
@@ -0,0 +1,222 @@
+package animeware.util.render;
+
+
+import static org.lwjgl.opengl.GL11.GL_BLEND;
+import static org.lwjgl.opengl.GL11.GL_LINE_SMOOTH;
+import static org.lwjgl.opengl.GL11.GL_LINE_SMOOTH_HINT;
+import static org.lwjgl.opengl.GL11.GL_NICEST;
+import static org.lwjgl.opengl.GL11.GL_ONE_MINUS_SRC_ALPHA;
+import static org.lwjgl.opengl.GL11.GL_POINT_SMOOTH;
+import static org.lwjgl.opengl.GL11.GL_POINT_SMOOTH_HINT;
+import static org.lwjgl.opengl.GL11.GL_POLYGON_SMOOTH;
+import static org.lwjgl.opengl.GL11.GL_POLYGON_SMOOTH_HINT;
+import static org.lwjgl.opengl.GL11.GL_SRC_ALPHA;
+import static org.lwjgl.opengl.GL11.glBlendFunc;
+import static org.lwjgl.opengl.GL11.glDisable;
+import static org.lwjgl.opengl.GL11.glEnable;
+import static org.lwjgl.opengl.GL11.glHint;
+import static org.lwjgl.opengl.GL11.glScissor;
+
+import java.awt.Color;
+
+import org.lwjgl.opengl.GL11;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.client.shader.Framebuffer;
+import net.minecraft.util.ResourceLocation;
+
+public class RenderUtil {
+
+ private static Minecraft mc = Minecraft.getMinecraft();
+
+ public static Framebuffer createFrameBuffer(Framebuffer framebuffer) {
+ if (framebuffer == null || framebuffer.framebufferWidth != mc.displayWidth || framebuffer.framebufferHeight != mc.displayHeight) {
+ if (framebuffer != null) {
+ framebuffer.deleteFramebuffer();
+ }
+ return new Framebuffer(mc.displayWidth, mc.displayHeight, true);
+ }
+ return framebuffer;
+ }
+ public static void cbLogo(ResourceLocation resourceLocation, float f, float f2, float f3) {
+ float f4 = f * 2.0f;
+ float f5 = f * 2.0f;
+ float f6 = 0.0f;
+ float f7 = 0.0f;
+ GL11.glEnable(3042);
+ Minecraft.getMinecraft().getTextureManager().bindTexture(resourceLocation);
+ GL11.glBegin(7);
+ GL11.glTexCoord2d(f6 / f, f7 / f);
+ GL11.glVertex2d(f2, f3);
+ GL11.glTexCoord2d(f6 / f, (f7 + f) / f);
+ GL11.glVertex2d(f2, f3 + f5);
+ GL11.glTexCoord2d((f6 + f) / f, (f7 + f) / f);
+ GL11.glVertex2d(f2 + f4, f3 + f5);
+ GL11.glTexCoord2d((f6 + f) / f, f7 / f);
+ GL11.glVertex2d(f2 + f4, f3);
+ //GL11.glRotated(10, f, f2, f3);
+ GL11.glEnd();
+ GL11.glDisable(3042);
+ }
+
+ public static void drawImg(ResourceLocation loc, double posX, double posY, double width, double height) {
+ mc.getTextureManager().bindTexture(loc);
+ float f = 1.0F / (float) width;
+ float f1 = 1.0F / (float) height;
+ Tessellator tessellator = Tessellator.getInstance();
+ WorldRenderer worldrenderer = tessellator.getWorldRenderer();
+ worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);
+ worldrenderer.pos(posX, (posY + height), 0.0D).tex(0 * f, ((0 + (float) height) * f1)).endVertex();
+ worldrenderer.pos((posX + width), (posY + height), 0.0D).tex((0 + (float) width) * f, (0 + (float) height) * f1).endVertex();
+ worldrenderer.pos((posX + width), posY, 0.0D).tex((0 + (float) width) * f, 0 * f1).endVertex();
+ worldrenderer.pos(posX, posY, 0.0D).tex(0 * f, 0 * f1).endVertex();
+ tessellator.draw();
+ }
+ public static void resetColor() {
+ GlStateManager.color(1, 1, 1, 1);
+ }
+ public static void color(int color, float alpha) {
+ float r = (float) (color >> 16 & 255) / 255.0F;
+ float g = (float) (color >> 8 & 255) / 255.0F;
+ float b = (float) (color & 255) / 255.0F;
+ GlStateManager.color(r, g, b, alpha);
+ }
+
+ // Colors the next texture without a specified alpha value
+ public static void color(int color) {
+ color(color, (float) (color >> 24 & 255) / 255.0F);
+ }
+
+ public static void drawGradientRect(double left, double top, double right, double bottom, int startColor, int endColor) {
+ float f = (float) (startColor >> 24 & 255) / 255.0F;
+ float f1 = (float) (startColor >> 16 & 255) / 255.0F;
+ float f2 = (float) (startColor >> 8 & 255) / 255.0F;
+ float f3 = (float) (startColor & 255) / 255.0F;
+ float f4 = (float) (endColor >> 24 & 255) / 255.0F;
+ float f5 = (float) (endColor >> 16 & 255) / 255.0F;
+ float f6 = (float) (endColor >> 8 & 255) / 255.0F;
+ float f7 = (float) (endColor & 255) / 255.0F;
+ GlStateManager.disableTexture2D();
+ GlStateManager.enableBlend();
+ GlStateManager.disableAlpha();
+ GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
+ GlStateManager.shadeModel(7425);
+ Tessellator tessellator = Tessellator.getInstance();
+ WorldRenderer worldrenderer = tessellator.getWorldRenderer();
+ worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR);
+ worldrenderer.pos(right, top, 0.0D).color(f1, f2, f3, f).endVertex();
+ worldrenderer.pos(left, top, 0.0D).color(f1, f2, f3, f).endVertex();
+ worldrenderer.pos(left, bottom, 0.0D).color(f5, f6, f7, f4).endVertex();
+ worldrenderer.pos(right, bottom, 0.0D).color(f5, f6, f7, f4).endVertex();
+ tessellator.draw();
+ GlStateManager.shadeModel(7424);
+ GlStateManager.disableBlend();
+ GlStateManager.enableAlpha();
+ GlStateManager.enableTexture2D();
+ }
+
+ public static void startSmooth() {
+ glEnable(GL_LINE_SMOOTH);
+ glEnable(GL_POLYGON_SMOOTH);
+ glEnable(GL_POINT_SMOOTH);
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
+ glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
+ glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
+ }
+
+ public static void endSmooth() {
+ glDisable(GL_LINE_SMOOTH);
+ glDisable(GL_POLYGON_SMOOTH);
+ glEnable(GL_POINT_SMOOTH);
+ }
+
+ public static Color fade(final Color color, int index, int count) {
+ float[] hsb = new float[3];
+ Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), hsb);
+
+ float brightness = Math.abs((((System.currentTimeMillis() % 2000) / 1000F + (index / (float) count) * 2F) % 2F) - 1);
+ brightness = 0.5f + (0.5f * brightness);
+
+ hsb[2] = brightness % 2F;
+ return new Color(Color.HSBtoRGB(hsb[0], hsb[1], hsb[2]));
+ }
+
+ public static void scissor(double x, double y, double width, double height) {
+ ScaledResolution sr = new ScaledResolution(mc);
+ final double scale = sr.getScaleFactor();
+
+ y = sr.getScaledHeight() - y;
+
+ x *= scale;
+ y *= scale;
+ width *= scale;
+ height *= scale;
+
+ glScissor((int) x, (int) (y - height), (int) width, (int) height);
+ }
+
+ public static int getOppositeColor(int color) {
+ int R = color & 255;
+ int G = (color >> 8) & 255;
+ int B = (color >> 16) & 255;
+ int A = (color >> 24) & 255;
+ R = 255 - R;
+ G = 255 - G;
+ B = 255 - B;
+ return R + (G << 8) + (B << 16) + (A << 24);
+ }
+ public static void drawCircle(double ballX, double ballY, float radius, int sections, int color) {
+ double dAngle = 6.283185307179586D / sections;
+ GL11.glPushAttrib(8192);
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glEnable(2848);
+ GL11.glLineWidth(2.0F);
+ GL11.glBegin(6);
+ int i;
+ for (i = 0; i < sections; i++) {
+ float x = (float)(radius * Math.sin(i * dAngle));
+ float y = (float)(radius * Math.cos(i * dAngle));
+ ColorUtils.glColor(color);
+ GL11.glVertex2d(ballX + x, ballY + y);
+ }
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+ GL11.glEnd();
+ GL11.glBegin(2);
+ for (i = 0; i < sections; i++) {
+ float x = (float)(radius * Math.sin(i * dAngle));
+ float y = (float)(radius * Math.cos(i * dAngle));
+ ColorUtils.glColor(color);
+ GL11.glVertex2d(ballX + x, ballY + y);
+ }
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+ GL11.glEnd();
+ GL11.glPopAttrib();
+ }
+
+ public static int getRainbow(int x, int y, float saturation) {
+ long l = System.currentTimeMillis() - x * 10L - y * 10L;
+ return Color.HSBtoRGB((float)(l % 6000L) / 6000.0F, saturation, 1.0F);
+ }
+ public static void scissor(int x, int y, int x2, int y2) {
+ GL11.glScissor(x * new ScaledResolution(mc).getScaleFactor(),
+ (new ScaledResolution(mc).getScaledHeight() - y2) * new ScaledResolution(mc).getScaleFactor(),
+ (x2 - x) * new ScaledResolution(mc).getScaleFactor(),
+ (y2 - y) * new ScaledResolution(mc).getScaleFactor());
+ }
+ public static void scissor2(int x, int y, int x2, int y2) {
+ GL11.glScissor(x * new ScaledResolution(mc).getScaleFactor(),
+ (new ScaledResolution(mc).getScaledHeight() - y2) * new ScaledResolution(mc).getScaleFactor(),
+ (x - x2) * new ScaledResolution(mc).getScaleFactor(),
+ (y - y2) * new ScaledResolution(mc).getScaleFactor());
+ }
+
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/util/render/ResourceUtils.java b/src/minecraft/animeware/util/render/ResourceUtils.java
new file mode 100644
index 0000000..57710b3
--- /dev/null
+++ b/src/minecraft/animeware/util/render/ResourceUtils.java
@@ -0,0 +1,98 @@
+package animeware.util.render;
+
+import com.google.common.base.Charsets;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufInputStream;
+import io.netty.buffer.Unpooled;
+import io.netty.handler.codec.base64.Base64;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.multiplayer.ServerData;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.ThreadDownloadImageData;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.texture.DynamicTexture;
+import net.minecraft.client.renderer.texture.ITextureObject;
+import net.minecraft.client.renderer.texture.TextureUtil;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.client.resources.ResourcePackRepository;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.ResourceLocation;
+
+public class ResourceUtils {
+ private static final Map playerSkins = new HashMap<>();
+
+ static final Minecraft mc = Minecraft.getMinecraft();
+
+ public static void drawColoredBlockOverlay(AxisAlignedBB axisAlignedBBIn, int red, int green, int blue, int alpha) {
+ Tessellator tessellator = Tessellator.getInstance();
+ WorldRenderer worldrenderer = tessellator.getWorldRenderer();
+ worldrenderer.func_181668_a(5, DefaultVertexFormats.field_181706_f);
+ worldrenderer.func_181662_b(axisAlignedBBIn.minX, axisAlignedBBIn.minY, axisAlignedBBIn.minZ).func_181666_a(red, green, blue, alpha).func_181675_d();
+ worldrenderer.func_181662_b(axisAlignedBBIn.maxX, axisAlignedBBIn.minY, axisAlignedBBIn.minZ).func_181666_a(red, green, blue, alpha).func_181675_d();
+ worldrenderer.func_181662_b(axisAlignedBBIn.minX, axisAlignedBBIn.minY, axisAlignedBBIn.maxZ).func_181666_a(red, green, blue, alpha).func_181675_d();
+ worldrenderer.func_181662_b(axisAlignedBBIn.maxX, axisAlignedBBIn.minY, axisAlignedBBIn.maxZ).func_181666_a(red, green, blue, alpha).func_181675_d();
+ tessellator.draw();
+ worldrenderer.func_181668_a(5, DefaultVertexFormats.field_181706_f);
+ worldrenderer.func_181662_b(axisAlignedBBIn.minX, axisAlignedBBIn.maxY, axisAlignedBBIn.minZ).func_181666_a(red, green, blue, alpha).func_181675_d();
+ worldrenderer.func_181662_b(axisAlignedBBIn.minX, axisAlignedBBIn.maxY, axisAlignedBBIn.maxZ).func_181666_a(red, green, blue, alpha).func_181675_d();
+ worldrenderer.func_181662_b(axisAlignedBBIn.maxX, axisAlignedBBIn.maxY, axisAlignedBBIn.minZ).func_181666_a(red, green, blue, alpha).func_181675_d();
+ worldrenderer.func_181662_b(axisAlignedBBIn.maxX, axisAlignedBBIn.maxY, axisAlignedBBIn.maxZ).func_181666_a(red, green, blue, alpha).func_181675_d();
+ tessellator.draw();
+ worldrenderer.func_181668_a(5, DefaultVertexFormats.field_181706_f);
+ worldrenderer.func_181662_b(axisAlignedBBIn.minX, axisAlignedBBIn.minY, axisAlignedBBIn.minZ).func_181666_a(red, green, blue, alpha).func_181675_d();
+ worldrenderer.func_181662_b(axisAlignedBBIn.minX, axisAlignedBBIn.maxY, axisAlignedBBIn.minZ).func_181666_a(red, green, blue, alpha).func_181675_d();
+ worldrenderer.func_181662_b(axisAlignedBBIn.maxX, axisAlignedBBIn.minY, axisAlignedBBIn.minZ).func_181666_a(red, green, blue, alpha).func_181675_d();
+ worldrenderer.func_181662_b(axisAlignedBBIn.maxX, axisAlignedBBIn.maxY, axisAlignedBBIn.minZ).func_181666_a(red, green, blue, alpha).func_181675_d();
+ worldrenderer.func_181662_b(axisAlignedBBIn.maxX, axisAlignedBBIn.minY, axisAlignedBBIn.maxZ).func_181666_a(red, green, blue, alpha).func_181675_d();
+ worldrenderer.func_181662_b(axisAlignedBBIn.maxX, axisAlignedBBIn.maxY, axisAlignedBBIn.maxZ).func_181666_a(red, green, blue, alpha).func_181675_d();
+ worldrenderer.func_181662_b(axisAlignedBBIn.minX, axisAlignedBBIn.minY, axisAlignedBBIn.maxZ).func_181666_a(red, green, blue, alpha).func_181675_d();
+ worldrenderer.func_181662_b(axisAlignedBBIn.minX, axisAlignedBBIn.maxY, axisAlignedBBIn.maxZ).func_181666_a(red, green, blue, alpha).func_181675_d();
+ worldrenderer.func_181662_b(axisAlignedBBIn.minX, axisAlignedBBIn.minY, axisAlignedBBIn.minZ).func_181666_a(red, green, blue, alpha).func_181675_d();
+ worldrenderer.func_181662_b(axisAlignedBBIn.minX, axisAlignedBBIn.maxY, axisAlignedBBIn.minZ).func_181666_a(red, green, blue, alpha).func_181675_d();
+ tessellator.draw();
+ }
+
+ public static ResourceLocation getHeadLocation(String displayName) {
+ ResourceLocation playerSkin = playerSkins.getOrDefault(displayName, new ResourceLocation("urban/ui/defaults/heads/" + displayName + ".png"));
+ if (!playerSkins.containsKey(displayName)) {
+ ThreadDownloadImageData skinData = new ThreadDownloadImageData(null, "https://minotar.net/helm/" + displayName + "/32.png", new ResourceLocation("urban/ui/defaults/heads/steve.png"), null);
+ Minecraft.getMinecraft().getTextureManager().loadTexture(playerSkin, (ITextureObject)skinData);
+ playerSkins.put(displayName, playerSkin);
+ }
+ return playerSkin;
+ }
+
+ public static DynamicTexture getServerTexture(ServerData server) {
+ DynamicTexture texture = null;
+ ByteBuf bytebuf = Unpooled.copiedBuffer(server.getBase64EncodedIconData(), Charsets.UTF_8);
+ ByteBuf bytebuf1 = Base64.decode(bytebuf);
+ BufferedImage bufferedimage = null;
+ try {
+ bufferedimage = TextureUtil.readBufferedImage((InputStream)new ByteBufInputStream(bytebuf1));
+ } catch (Throwable throwable) {
+ //Logger.error("Failed to load server icon for " + server.serverName);
+ } finally {
+ bytebuf.release();
+ bytebuf1.release();
+ }
+ texture = new DynamicTexture(bufferedimage.getWidth(), bufferedimage.getHeight());
+ bufferedimage.getRGB(0, 0, bufferedimage.getWidth(), bufferedimage.getHeight(), texture.getTextureData(), 0, bufferedimage.getWidth());
+ texture.updateDynamicTexture();
+ return texture;
+ }
+
+ public static DynamicTexture getResourcePackImg(int i) {
+ DynamicTexture texture;
+ try {
+ texture = new DynamicTexture(((ResourcePackRepository.Entry)mc.getResourcePackRepository().getRepositoryEntries().get(i)).getResourcePack().getPackImage());
+ } catch (IOException var4) {
+ texture = TextureUtil.missingTexture;
+ }
+ return texture;
+ }
+}
diff --git a/src/minecraft/animeware/util/render/RoundedUtils.java b/src/minecraft/animeware/util/render/RoundedUtils.java
new file mode 100644
index 0000000..3a4e228
--- /dev/null
+++ b/src/minecraft/animeware/util/render/RoundedUtils.java
@@ -0,0 +1,261 @@
+package animeware.util.render;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import org.lwjgl.opengl.GL11;
+
+public class RoundedUtils {
+ static final Minecraft mc = Minecraft.getMinecraft();
+
+ static final FontRenderer fr = mc.fontRendererObj;
+
+ public static void enableGL2D() {
+ GL11.glDisable(2929);
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glDepthMask(true);
+ GL11.glEnable(2848);
+ GL11.glHint(3154, 4354);
+ GL11.glHint(3155, 4354);
+ }
+
+ public static void disableGL2D() {
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glEnable(2929);
+ GL11.glDisable(2848);
+ GL11.glHint(3154, 4352);
+ GL11.glHint(3155, 4352);
+ }
+
+ public static void drawSmoothRoundedRect(float x, float y, float x1, float y1, float radius, int color) {
+ GL11.glPushAttrib(0);
+ GL11.glScaled(0.5D, 0.5D, 0.5D);
+ x = (float)(x * 2.0D);
+ y = (float)(y * 2.0D);
+ x1 = (float)(x1 * 2.0D);
+ y1 = (float)(y1 * 2.0D);
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glEnable(2848);
+ setColor(color);
+ GL11.glEnable(2848);
+ GL11.glBegin(9);
+ int i;
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ GL11.glEnd();
+ GL11.glBegin(2);
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ GL11.glEnd();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glEnable(3553);
+ GL11.glScaled(2.0D, 2.0D, 2.0D);
+ GL11.glPopAttrib();
+ GL11.glLineWidth(1.0F);
+ }
+
+ public static void drawRoundedRect(float x, float y, float x1, float y1, float radius, int color) {
+ GL11.glPushAttrib(0);
+ GL11.glScaled(0.5D, 0.5D, 0.5D);
+ x = (float)(x * 2.0D);
+ y = (float)(y * 2.0D);
+ x1 = (float)(x1 * 2.0D);
+ y1 = (float)(y1 * 2.0D);
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glEnable(2848);
+ setColor(color);
+ GL11.glEnable(2848);
+ GL11.glBegin(9);
+ int i;
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ GL11.glEnd();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glEnable(3553);
+ GL11.glScaled(2.0D, 2.0D, 2.0D);
+ GL11.glPopAttrib();
+ GL11.glLineWidth(1.0F);
+ }
+
+ public static void drawRoundedOutline(float x, float y, float x1, float y1, float radius, float lineWidth, int color) {
+ GL11.glPushAttrib(0);
+ GL11.glScaled(0.5D, 0.5D, 0.5D);
+ x = (float)(x * 2.0D);
+ y = (float)(y * 2.0D);
+ x1 = (float)(x1 * 2.0D);
+ y1 = (float)(y1 * 2.0D);
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ setColor(color);
+ GL11.glEnable(2848);
+ GL11.glLineWidth(lineWidth);
+ GL11.glBegin(2);
+ int i;
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ GL11.glEnd();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glDisable(3042);
+ GL11.glEnable(3553);
+ GL11.glScaled(2.0D, 2.0D, 2.0D);
+ GL11.glPopAttrib();
+ GL11.glLineWidth(1.0F);
+ }
+
+ public static void drawSelectRoundedRect(float x, float y, float x1, float y1, float radius1, float radius2, float radius3, float radius4, int color) {
+ GL11.glPushAttrib(0);
+ GL11.glScaled(0.5D, 0.5D, 0.5D);
+ x = (float)(x * 2.0D);
+ y = (float)(y * 2.0D);
+ x1 = (float)(x1 * 2.0D);
+ y1 = (float)(y1 * 2.0D);
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ setColor(color);
+ GL11.glEnable(2848);
+ GL11.glBegin(9);
+ int i;
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x + radius1) + Math.sin(i * Math.PI / 180.0D) * radius1 * -1.0D, (y + radius1) + Math.cos(i * Math.PI / 180.0D) * radius1 * -1.0D);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x + radius2) + Math.sin(i * Math.PI / 180.0D) * radius2 * -1.0D, (y1 - radius2) + Math.cos(i * Math.PI / 180.0D) * radius2 * -1.0D);
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x1 - radius3) + Math.sin(i * Math.PI / 180.0D) * radius3, (y1 - radius3) + Math.cos(i * Math.PI / 180.0D) * radius3);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x1 - radius4) + Math.sin(i * Math.PI / 180.0D) * radius4, (y + radius4) + Math.cos(i * Math.PI / 180.0D) * radius4);
+ GL11.glEnd();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glDisable(3042);
+ GL11.glEnable(3553);
+ GL11.glScaled(2.0D, 2.0D, 2.0D);
+ GL11.glPopAttrib();
+ GL11.glLineWidth(1.0F);
+ }
+
+ public static void drawSelectRoundedOutline(float x, float y, float x1, float y1, float radius1, float radius2, float radius3, float radius4, float lineWidth, int color) {
+ GL11.glPushAttrib(0);
+ GL11.glScaled(0.5D, 0.5D, 0.5D);
+ x = (float)(x * 2.0D);
+ y = (float)(y * 2.0D);
+ x1 = (float)(x1 * 2.0D);
+ y1 = (float)(y1 * 2.0D);
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ setColor(color);
+ GL11.glEnable(2848);
+ GL11.glLineWidth(lineWidth);
+ GL11.glBegin(2);
+ int i;
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x + radius1) + Math.sin(i * Math.PI / 180.0D) * radius1 * -1.0D, (y + radius1) + Math.cos(i * Math.PI / 180.0D) * radius1 * -1.0D);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x + radius2) + Math.sin(i * Math.PI / 180.0D) * radius2 * -1.0D, (y1 - radius2) + Math.cos(i * Math.PI / 180.0D) * radius2 * -1.0D);
+ for (i = 0; i <= 90; i += 3)
+ GL11.glVertex2d((x1 - radius3) + Math.sin(i * Math.PI / 180.0D) * radius3, (y1 - radius3) + Math.cos(i * Math.PI / 180.0D) * radius3);
+ for (i = 90; i <= 180; i += 3)
+ GL11.glVertex2d((x1 - radius4) + Math.sin(i * Math.PI / 180.0D) * radius4, (y + radius4) + Math.cos(i * Math.PI / 180.0D) * radius4);
+ GL11.glEnd();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glDisable(3042);
+ GL11.glEnable(3553);
+ GL11.glScaled(2.0D, 2.0D, 2.0D);
+ GL11.glPopAttrib();
+ GL11.glLineWidth(1.0F);
+ }
+
+ public static void setColor(int color) {
+ float a = (color >> 24 & 0xFF) / 255.0F;
+ float r = (color >> 16 & 0xFF) / 255.0F;
+ float g = (color >> 8 & 0xFF) / 255.0F;
+ float b = (color & 0xFF) / 255.0F;
+ GL11.glColor4f(r, g, b, a);
+ }
+
+ public static void drawRoundedGradientRectCorner(float x, float y, float x1, float y1, float radius, int color, int color2, int color3, int color4) {
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ GL11.glBlendFunc(770, 771);
+ GL11.glEnable(2848);
+ GL11.glShadeModel(7425);
+ GL11.glPushAttrib(0);
+ GL11.glScaled(0.5D, 0.5D, 0.5D);
+ x = (float)(x * 2.0D);
+ y = (float)(y * 2.0D);
+ x1 = (float)(x1 * 2.0D);
+ y1 = (float)(y1 * 2.0D);
+ GL11.glEnable(3042);
+ GL11.glDisable(3553);
+ setColor(color);
+ GL11.glEnable(2848);
+ GL11.glShadeModel(7425);
+ GL11.glBegin(9);
+ int i;
+ for (i = 0; i <= 90; i += 3)
+ setColor(color);
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 90; i <= 180; i += 3)
+ setColor(color2);
+ GL11.glVertex2d((x + radius) + Math.sin(i * Math.PI / 180.0D) * radius * -1.0D, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius * -1.0D);
+ for (i = 0; i <= 90; i += 3)
+ setColor(color3);
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y1 - radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ for (i = 90; i <= 180; i += 3)
+ setColor(color4);
+ GL11.glVertex2d((x1 - radius) + Math.sin(i * Math.PI / 180.0D) * radius, (y + radius) + Math.cos(i * Math.PI / 180.0D) * radius);
+ GL11.glEnd();
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glDisable(3042);
+ GL11.glEnable(3553);
+ GL11.glScaled(2.0D, 2.0D, 2.0D);
+ GL11.glPopAttrib();
+ GL11.glLineWidth(1.0F);
+ GL11.glEnable(3553);
+ GL11.glDisable(3042);
+ GL11.glDisable(2848);
+ GL11.glShadeModel(7424);
+ }
+}
diff --git a/src/minecraft/animeware/util/render/ShaderUtil.java b/src/minecraft/animeware/util/render/ShaderUtil.java
new file mode 100644
index 0000000..81fd93d
--- /dev/null
+++ b/src/minecraft/animeware/util/render/ShaderUtil.java
@@ -0,0 +1,213 @@
+package animeware.util.render;
+
+import static org.lwjgl.opengl.GL11.GL_QUADS;
+import static org.lwjgl.opengl.GL11.glBegin;
+import static org.lwjgl.opengl.GL11.glEnd;
+import static org.lwjgl.opengl.GL11.glTexCoord2f;
+import static org.lwjgl.opengl.GL11.glVertex2f;
+import static org.lwjgl.opengl.GL20.GL_COMPILE_STATUS;
+import static org.lwjgl.opengl.GL20.GL_FRAGMENT_SHADER;
+import static org.lwjgl.opengl.GL20.GL_LINK_STATUS;
+import static org.lwjgl.opengl.GL20.GL_VERTEX_SHADER;
+import static org.lwjgl.opengl.GL20.glAttachShader;
+import static org.lwjgl.opengl.GL20.glCompileShader;
+import static org.lwjgl.opengl.GL20.glCreateProgram;
+import static org.lwjgl.opengl.GL20.glCreateShader;
+import static org.lwjgl.opengl.GL20.glGetProgrami;
+import static org.lwjgl.opengl.GL20.glGetShaderInfoLog;
+import static org.lwjgl.opengl.GL20.glGetShaderi;
+import static org.lwjgl.opengl.GL20.glGetUniformLocation;
+import static org.lwjgl.opengl.GL20.glLinkProgram;
+import static org.lwjgl.opengl.GL20.glShaderSource;
+import static org.lwjgl.opengl.GL20.glUniform1f;
+import static org.lwjgl.opengl.GL20.glUniform1i;
+import static org.lwjgl.opengl.GL20.glUniform2f;
+import static org.lwjgl.opengl.GL20.glUniform2i;
+import static org.lwjgl.opengl.GL20.glUniform3f;
+import static org.lwjgl.opengl.GL20.glUniform4f;
+import static org.lwjgl.opengl.GL20.glUseProgram;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import animeware.util.Utils;
+import animeware.util.file.FileUtils;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.util.ResourceLocation;
+
+public class ShaderUtil implements Utils {
+ private final int programID;
+
+ public ShaderUtil(String fragmentShaderLoc, String vertexShaderLoc) {
+ int program = glCreateProgram();
+ try {
+ int fragmentShaderID;
+ switch (fragmentShaderLoc) {
+ case "roundedRect":
+ fragmentShaderID = createShader(new ByteArrayInputStream(roundedRect.getBytes()), GL_FRAGMENT_SHADER);
+ break;
+ case "roundedRectGradient":
+ fragmentShaderID = createShader(new ByteArrayInputStream(roundedRectGradient.getBytes()), GL_FRAGMENT_SHADER);
+ break;
+ default:
+ fragmentShaderID = createShader(mc.getResourceManager().getResource(new ResourceLocation(fragmentShaderLoc)).getInputStream(), GL_FRAGMENT_SHADER);
+ break;
+ }
+ glAttachShader(program, fragmentShaderID);
+
+ int vertexShaderID = createShader(mc.getResourceManager().getResource(new ResourceLocation(vertexShaderLoc)).getInputStream(), GL_VERTEX_SHADER);
+ glAttachShader(program, vertexShaderID);
+
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ glLinkProgram(program);
+ int status = glGetProgrami(program, GL_LINK_STATUS);
+
+ if (status == 0) {
+ throw new IllegalStateException("Shader failed to link!");
+ }
+ this.programID = program;
+ }
+
+ public ShaderUtil(String fragmentShaderLoc) {
+ this(fragmentShaderLoc, "Tenacity/Shaders/vertex.vsh");
+ }
+
+
+ public void init() {
+ glUseProgram(programID);
+ }
+
+ public void unload() {
+ glUseProgram(0);
+ }
+
+ public int getUniform(String name) {
+ return glGetUniformLocation(programID, name);
+ }
+
+
+ public void setUniformf(String name, float... args) {
+ int loc = glGetUniformLocation(programID, name);
+ switch (args.length) {
+ case 1:
+ glUniform1f(loc, args[0]);
+ break;
+ case 2:
+ glUniform2f(loc, args[0], args[1]);
+ break;
+ case 3:
+ glUniform3f(loc, args[0], args[1], args[2]);
+ break;
+ case 4:
+ glUniform4f(loc, args[0], args[1], args[2], args[3]);
+ break;
+ }
+ }
+
+ public void setUniformi(String name, int... args) {
+ int loc = glGetUniformLocation(programID, name);
+ if (args.length > 1) glUniform2i(loc, args[0], args[1]);
+ else glUniform1i(loc, args[0]);
+ }
+
+ public static void drawQuads(float x, float y, float width, float height) {
+ if (mc.gameSettings.ofFastRender) return;
+ glBegin(GL_QUADS);
+ glTexCoord2f(0, 0);
+ glVertex2f(x, y);
+ glTexCoord2f(0, 1);
+ glVertex2f(x, y + height);
+ glTexCoord2f(1, 1);
+ glVertex2f(x + width, y + height);
+ glTexCoord2f(1, 0);
+ glVertex2f(x + width, y);
+ glEnd();
+ }
+
+ public static void drawQuads() {
+ if (mc.gameSettings.ofFastRender) return;
+ ScaledResolution sr = new ScaledResolution(mc);
+ float width = (float) sr.getScaledWidth_double();
+ float height = (float) sr.getScaledHeight_double();
+ glBegin(GL_QUADS);
+ glTexCoord2f(0, 1);
+ glVertex2f(0, 0);
+ glTexCoord2f(0, 0);
+ glVertex2f(0, height);
+ glTexCoord2f(1, 0);
+ glVertex2f(width, height);
+ glTexCoord2f(1, 1);
+ glVertex2f(width, 0);
+ glEnd();
+ }
+
+ private int createShader(InputStream inputStream, int shaderType) {
+ int shader = glCreateShader(shaderType);
+ glShaderSource(shader, FileUtils.readInputStream(inputStream));
+ glCompileShader(shader);
+
+
+ if (glGetShaderi(shader, GL_COMPILE_STATUS) == 0) {
+ System.out.println(glGetShaderInfoLog(shader, 4096));
+ throw new IllegalStateException(String.format("Shader (%s) failed to compile!", shaderType));
+ }
+
+ return shader;
+ }
+
+
+ private final String roundedRectGradient = "#version 120\n" +
+ "\n" +
+ "uniform vec2 location, rectSize;\n" +
+ "uniform vec4 color1, color2, color3, color4;\n" +
+ "uniform float radius;\n" +
+ "\n" +
+ "#define NOISE .5/255.0\n" +
+ "\n" +
+ "float roundSDF(vec2 p, vec2 b, float r) {\n" +
+ " return length(max(abs(p) - b , 0.0)) - r;\n" +
+ "}\n" +
+ "\n" +
+ "vec3 createGradient(vec2 coords, vec3 color1, vec3 color2, vec3 color3, vec3 color4){\n" +
+ " vec3 color = mix(mix(color1.rgb, color2.rgb, coords.y), mix(color3.rgb, color4.rgb, coords.y), coords.x);\n" +
+ " //Dithering the color\n" +
+ " // from https://shader-tutorial.dev/advanced/color-banding-dithering/\n" +
+ " color += mix(NOISE, -NOISE, fract(sin(dot(coords.xy, vec2(12.9898, 78.233))) * 43758.5453));\n" +
+ " return color;\n" +
+ "}\n" +
+ "\n" +
+ "void main() {\n" +
+ " vec2 st = gl_TexCoord[0].st;\n" +
+ " vec2 halfSize = rectSize * .5;\n" +
+ " \n" +
+ " float smoothedAlpha = (1.0-smoothstep(0.0, 2., roundSDF(halfSize - (gl_TexCoord[0].st * rectSize), halfSize - radius - 1., radius))) * color1.a;\n" +
+ " gl_FragColor = vec4(createGradient(st, color1.rgb, color2.rgb, color3.rgb, color4.rgb), smoothedAlpha);\n" +
+ "}";
+
+
+ private String roundedRect = "#version 120\n" +
+ "\n" +
+ "uniform vec2 location, rectSize;\n" +
+ "uniform vec4 color;\n" +
+ "uniform float radius;\n" +
+ "uniform bool blur;\n" +
+ "\n" +
+ "float roundSDF(vec2 p, vec2 b, float r) {\n" +
+ " return length(max(abs(p) - b, 0.0)) - r;\n" +
+ "}\n" +
+ "\n" +
+ "\n" +
+ "void main() {\n" +
+ " vec2 rectHalf = rectSize * .5;\n" +
+ " // Smooth the result (free antialiasing).\n" +
+ " float smoothedAlpha = (1.0-smoothstep(0.0, 1.0, roundSDF(rectHalf - (gl_TexCoord[0].st * rectSize), rectHalf - radius - 1., radius))) * color.a;\n" +
+ " gl_FragColor = vec4(color.rgb, smoothedAlpha);// mix(quadColor, shadowColor, 0.0);\n" +
+ "\n" +
+ "}";
+
+}
diff --git a/src/minecraft/animeware/util/render/scrolling/Scroll.java b/src/minecraft/animeware/util/render/scrolling/Scroll.java
new file mode 100644
index 0000000..e46da5c
--- /dev/null
+++ b/src/minecraft/animeware/util/render/scrolling/Scroll.java
@@ -0,0 +1,59 @@
+ package animeware.util.render.scrolling;
+
+import java.io.IOException;
+
+import org.lwjgl.input.Mouse;
+import org.lwjgl.opengl.GL11;
+
+import animeware.hud.mod.HudManager;
+import animeware.hud.mod.HudMod;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.ScaledResolution;
+
+public class Scroll extends GuiScreen {
+ public static Scroll instance = new Scroll(); // for displayGuiScreen() func
+
+ private float currentScroll;
+ private final int x = 10, y = 10, width = 100, height = 300;
+
+ HudManager mM;
+
+ @Override
+ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
+ super.drawScreen(mouseX, mouseY, partialTicks);
+ if (currentScroll > 0) currentScroll = 0.0f;
+ Gui.drawRect(x, y, width, height, 0xff212121);
+ int textHeight = 0;
+ GL11.glPushMatrix();
+ GL11.glEnable(GL11.GL_SCISSOR_TEST);
+ GL11.glTranslatef(0, currentScroll, 0); // Scroll
+ ScaledResolution r = new ScaledResolution(mc);
+ int s = r.getScaleFactor();
+ int translatedY = r.getScaledHeight() - y - height;
+ GL11.glScissor(x * s, translatedY * s + 18, width * s, height * s - 18); // Scissor with scaleFactor
+ for (HudMod m : mM.hudMods) { // TODO:Import your modules
+ fontRendererObj.drawStringWithShadow(m.name, x + 3, y + textHeight + 2, -1);
+ textHeight += fontRendererObj.FONT_HEIGHT + 20;
+ }
+ if (currentScroll < -(textHeight / 2.67f)) currentScroll = -(textHeight / 2.67f);
+ GL11.glDisable(GL11.GL_SCISSOR_TEST);
+ GL11.glPopMatrix();
+ }
+
+ @Override
+ public boolean doesGuiPauseGame() {
+ return false;
+ }
+
+ @Override
+ public void handleMouseInput() throws IOException {
+ super.handleMouseInput();
+
+ int i = Mouse.getEventDWheel();
+
+ i = Integer.compare(i, 0);
+
+ currentScroll += i * 10f;
+ }
+}
diff --git a/src/minecraft/animeware/util/render/theme/CurrentTheme.java b/src/minecraft/animeware/util/render/theme/CurrentTheme.java
new file mode 100644
index 0000000..466e16d
--- /dev/null
+++ b/src/minecraft/animeware/util/render/theme/CurrentTheme.java
@@ -0,0 +1,18 @@
+package animeware.util.render.theme;
+
+public class CurrentTheme {
+
+ public static Theme current = new RainbowTheme();
+
+ public CurrentTheme() {
+ }
+
+ public static Theme getCurrent() {
+ return current;
+ }
+
+ public void setCurrent(Theme current) {
+ this.current = current;
+ }
+
+}
diff --git a/src/minecraft/animeware/util/render/theme/RainbowTheme.java b/src/minecraft/animeware/util/render/theme/RainbowTheme.java
new file mode 100644
index 0000000..e5bfc00
--- /dev/null
+++ b/src/minecraft/animeware/util/render/theme/RainbowTheme.java
@@ -0,0 +1,21 @@
+package animeware.util.render.theme;
+
+import java.awt.Color;
+
+import animeware.util.render.ColorUtil;
+import net.minecraft.util.ResourceLocation;
+
+public class RainbowTheme extends Theme {
+
+ public RainbowTheme() {
+ super("Raindbow", 0.1, new ResourceLocation("Animeware/background/old/bg5.png"), ColorUtil.getRGB(7, 0.9f, 1, 100), -1);
+ }
+
+ @Override
+ public int getMainColor() {
+ float hue = ((System.currentTimeMillis() + 100) % (int)(4 * 1000)) / (float)(4 * 1000);
+ int color = new Color(255, 254, 255, 255).getRGB();//Color.HSBtoRGB(hue, 0.9f, 1);
+ return color;
+ }
+
+}
diff --git a/src/minecraft/animeware/util/render/theme/Theme.java b/src/minecraft/animeware/util/render/theme/Theme.java
new file mode 100644
index 0000000..4a2e64b
--- /dev/null
+++ b/src/minecraft/animeware/util/render/theme/Theme.java
@@ -0,0 +1,46 @@
+package animeware.util.render.theme;
+
+
+import com.google.gson.annotations.Expose;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.util.ResourceLocation;
+
+public class Theme {
+ private static final Minecraft mc = Minecraft.getMinecraft();
+
+ public String name;
+ public double version;
+ public ResourceLocation mainMenuBg;
+ public int mainColor;
+ public int secondaryColor;
+
+ public Theme(String name, double version, ResourceLocation mainMenuBg, int mainColor, int secondaryColor) {
+ this.name = name;
+ this.version = version;
+ this.mainMenuBg = mainMenuBg;
+ this.mainColor = mainColor;
+ this.secondaryColor = secondaryColor;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public double getVersion() {
+ return version;
+ }
+
+ public ResourceLocation getMainMenuBg() {
+ return mainMenuBg;
+ }
+
+ public int getMainColor() {
+ return mainColor;
+ }
+
+ public int getSecondaryColor() {
+ return secondaryColor;
+ }
+}
diff --git a/src/minecraft/animeware/util/render/ui/ClickGUIUtil.java b/src/minecraft/animeware/util/render/ui/ClickGUIUtil.java
new file mode 100644
index 0000000..5c95f33
--- /dev/null
+++ b/src/minecraft/animeware/util/render/ui/ClickGUIUtil.java
@@ -0,0 +1,88 @@
+package animeware.util.render.ui;
+
+import java.awt.Color;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+
+import org.lwjgl.opengl.GL11;
+
+import animeware.NightSky;
+import animeware.gui.clickgui.ClickGUI;
+import animeware.ui.themes.impl.ThemeManager;
+import animeware.util.font.ucfont.UCFontRenderer;
+import animeware.util.render.RoundedUtils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.network.NetworkPlayerInfo;
+import net.minecraft.util.ResourceLocation;
+
+public class ClickGUIUtil {
+
+ Minecraft mc = Minecraft.getMinecraft();
+ static UCFontRenderer fr = new UCFontRenderer(new ResourceLocation("Animeware/font/font.ttf"), 19.0f);
+
+ public static void renderClickGUI() {
+ if(ThemeManager.guilight) {
+ RoundedUtils.drawSmoothRoundedRect((ClickGUI.width / 2 - 145), (ClickGUI.height / 2 - 110), (ClickGUI.width / 2 + 190), (ClickGUI.height / 2 + 110), 18.0F, new Color(100, 100, 100, 255).getRGB());
+ RoundedUtils.drawSmoothRoundedRect((ClickGUI.width / 2 - 190), (ClickGUI.height / 2 - 110), (ClickGUI.width / 2 - 150), (ClickGUI.height / 2 + 110), 18.0F, new Color(50, 50, 55, 200).getRGB());
+ //RoundedUtils.drawSmoothRoundedRect((ClickGUI.width / 2 + 90), (ClickGUI.height / 2 - 110), (ClickGUI.width / 2 + 190), (ClickGUI.height / 2 + 110), 18.0F, new Color(150, 150, 155, 155).getRGB());
+ RoundedUtils.drawSmoothRoundedRect((ClickGUI.width / 2 - 185), (ClickGUI.height / 2 - 74), (ClickGUI.width / 2 - 155), (ClickGUI.height / 2 - 72), 4.0F, new Color(100, 100, 105, 255).getRGB());
+
+ RoundedUtils.drawSmoothRoundedRect((ClickGUI.width / 2 - 190), (ClickGUI.height / 2 + 115), (ClickGUI.width / 2 + 190), (ClickGUI.height / 2 + 155), 18.0F, new Color(80, 80, 79, 255).getRGB());
+ } else {
+ RoundedUtils.drawSmoothRoundedRect((ClickGUI.width / 2 - 190), (ClickGUI.height / 2 - 110), (ClickGUI.width / 2 + 190), (ClickGUI.height / 2 + 115), 12.0F, new Color(26, 24, 25, 255).getRGB());
+
+ RoundedUtils.drawSmoothRoundedRect((ClickGUI.width / 2 - 184), (ClickGUI.height / 2 - 104), (ClickGUI.width / 2 - 90), (ClickGUI.height / 2 - 75), 12.0F, new Color(32, 32, 32, 255).getRGB());
+
+ RoundedUtils.drawSmoothRoundedRect((ClickGUI.width / 2 - 184), (ClickGUI.height / 2 - 68), (ClickGUI.width / 2 - 90), (ClickGUI.height / 2 + 72), 12.0F, new Color(32, 32, 32, 255).getRGB());
+
+ RoundedUtils.drawSmoothRoundedRect((ClickGUI.width / 2 - 184), (ClickGUI.height / 2 + 79), (ClickGUI.width / 2 - 90), (ClickGUI.height / 2 + 109), 12.0F, new Color(32, 32, 32, 255).getRGB());
+
+ RoundedUtils.drawSmoothRoundedRect((ClickGUI.width / 2 - 84), (ClickGUI.height / 2 - 104), (ClickGUI.width / 2 + 184), (ClickGUI.height / 2 - 86), 12.0F, new Color(32, 32, 32, 255).getRGB());
+
+ RoundedUtils.drawSmoothRoundedRect((ClickGUI.width / 2 - 84), (ClickGUI.height / 2 - 79), (ClickGUI.width / 2 + 184), (ClickGUI.height / 2 + 109), 12.0F, new Color(32, 32, 32, 255).getRGB());
+
+
+ //0,255,255
+
+
+
+
+ //RoundedUtils.drawSmoothRoundedRect((ClickGUI.width / 2 - 145), (ClickGUI.height / 2 - 110), (ClickGUI.width / 2 + 190), (ClickGUI.height / 2 + 110), 18.0F, new Color(25, 25, 30, 255).getRGB());
+ //RoundedUtils.drawSmoothRoundedRect((ClickGUI.width / 2 - 190), (ClickGUI.height / 2 - 110), (ClickGUI.width / 2 - 150), (ClickGUI.height / 2 + 110), 18.0F, new Color(50, 50, 55, 200).getRGB());
+
+ //RoundedUtils.drawSmoothRoundedRect((ClickGUI.width / 2 - 185), (ClickGUI.height / 2 - 74), (ClickGUI.width / 2 - 155), (ClickGUI.height / 2 - 72), 4.0F, new Color(100, 100, 105, 255).getRGB());
+
+ //RoundedUtils.drawSmoothRoundedRect((ClickGUI.width / 2 - 190), (ClickGUI.height / 2 + 115), (ClickGUI.width / 2 + 190), (ClickGUI.height / 2 + 155), 18.0F, new Color(25, 25, 30, 255).getRGB());
+
+ }
+
+ DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm");
+ LocalTime localTime = LocalTime.now();
+ String time = dtf.format(localTime);
+
+ fr.drawString(NightSky.mcname , ClickGUI.width / 2 - 150, ClickGUI.height / 2 + 83, new Color(255, 255, 254, 255).getRGB());
+ fr.drawString(NightSky.rank() , ClickGUI.width / 2 - 150, ClickGUI.height / 2 + 94, -1);
+
+ //Minecraft.getMinecraft().fontRendererObj.drawString("FPS" , ClickGUI.width / 2 + 164, ClickGUI.height / 2 + 125, new Color(255, 255, 254, 255).getRGB());
+ //Minecraft.getMinecraft().fontRendererObj.drawString(Minecraft.getMinecraft().getDebugFPS() + "", ClickGUI.width / 2 + 144, ClickGUI.height / 2 + 125, new Color(255, 255, 254, 255).getRGB());
+ //Minecraft.getMinecraft().fontRendererObj.draw
+ //Minecraft.getMinecraft().fontRendererObj.drawString(time , ClickGUI.width / 2 + 156, ClickGUI.height / 2 + 137, -1);
+
+ NetworkPlayerInfo playerInfo = Minecraft.getMinecraft().getNetHandler().getPlayerInfo(Minecraft.getMinecraft().thePlayer.getUniqueID());
+ if(playerInfo != null) {
+ Minecraft.getMinecraft().getTextureManager().bindTexture(playerInfo.getLocationSkin());
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+ Gui.drawScaledCustomSizeModalRect(ClickGUI.width / 2 - 180, ClickGUI.height / 2 + 82, 8F, 8F, 8, 8, 24, 24, 64F, 64F);
+ }
+
+ }
+ public static void renderCosmeticMenu() {
+ if(ThemeManager.guilight) {
+ RoundedUtils.drawSmoothRoundedRect((ClickGUI.width / 2 - 145), (ClickGUI.height / 2 - 110), (ClickGUI.width / 2 + 190), (ClickGUI.height / 2 + 110), 18.0F, new Color(100, 100, 100, 255).getRGB());
+ } else {
+ RoundedUtils.drawSmoothRoundedRect((ClickGUI.width / 2 - 145), (ClickGUI.height / 2 - 110), (ClickGUI.width / 2 + 190), (ClickGUI.height / 2 + 110), 18.0F, new Color(25, 25, 30, 255).getRGB());
+ }
+ }
+
+}
diff --git a/src/minecraft/animeware/util/settings/BooleanSetting.java b/src/minecraft/animeware/util/settings/BooleanSetting.java
new file mode 100644
index 0000000..a2e5ef6
--- /dev/null
+++ b/src/minecraft/animeware/util/settings/BooleanSetting.java
@@ -0,0 +1,93 @@
+package animeware.util.settings;
+
+import java.awt.Color;
+
+import animeware.util.render.GuiUtils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.util.ResourceLocation;
+
+public class BooleanSetting extends Setting {
+
+ private boolean value;
+ public float x;
+ public float y;
+ static float size = 15.0f;
+ String string;
+
+ public BooleanSetting(float x, float y, String idk) {
+ this.x = x;
+ this.y = y;
+ this.string = idk;
+ }
+
+ public void render(float x, float y) {
+ this.x = x;
+ this.y = y;
+ GlStateManager.resetColor();
+ GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f);
+ GuiUtils.drawRoundedRect(x, y, x + size, y + size, 2.0f, new Color(0, 0, 0, 100).getRGB());
+ GuiUtils.drawRoundedOutline(x, y, x + size, y + size, 2.0f, 1.0f, new Color(200, 200, 200, 200).getRGB());
+ GuiUtils.drawTexture(this.getEnabledIcon(), x - 5.0f, y - 5.0f, size + 10.0f, size + 10.0f);
+ GlStateManager.resetColor();
+ GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f);
+ //Minecraft.getMinecraft().fontRendererObj.drawString(this.string, x + 20.0f, y, new Color(200, 200, 200, 200).getRGB());
+ Minecraft.getMinecraft().fontRendererObj.drawString(this.string, x + 20.0f, y, new Color(200, 200, 200, 200).getRGB(), false);
+ }
+
+ public ResourceLocation getEnabledIcon() {
+ return this.value ? new ResourceLocation("urban/ui/icons/tick.png") : new ResourceLocation("urban/ui/icons/notick.png");
+ }
+
+ public void onClick(float mx, float my, int mb) {
+ if (mb == 0 && mx > this.x && mx < this.x + size && my > this.y && my < this.y + size) {
+ this.value = !this.value;
+ }
+ }
+
+ public boolean isEnabled() {
+ return this.value;
+ }
+
+ public void setEnabled(boolean value) {
+ this.value = value;
+ }
+ public void toggle() {
+ value = !value;
+ }
+
+ public float getX() {
+ return this.x;
+ }
+
+ public float getY() {
+ return this.y;
+ }
+
+ public void setX(float x) {
+ this.x = x;
+ }
+
+ public void setY(float y) {
+ this.y = y;
+ }
+
+ /*public boolean enabled;
+
+ public BooleanSetting(String name, boolean enabled) {
+ this.name = name;
+ this.enabled = enabled;
+ }
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+ public void toggle() {
+ enabled = !enabled;
+ }*/
+
+}
diff --git a/src/minecraft/animeware/util/settings/ModeSetting.java b/src/minecraft/animeware/util/settings/ModeSetting.java
new file mode 100644
index 0000000..6d2a672
--- /dev/null
+++ b/src/minecraft/animeware/util/settings/ModeSetting.java
@@ -0,0 +1,34 @@
+package animeware.util.settings;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class ModeSetting extends Setting {
+
+ public int index;
+ public List modes;
+
+ public ModeSetting(String name, String defaultMode, String... modes) {
+ this.name = name;
+ this.modes = Arrays.asList(modes);
+ index = this.modes.indexOf(defaultMode);
+ }
+
+ public String getMode() {
+ return modes.get(index);
+ }
+
+ public boolean is(String mode) {
+ return index == modes.indexOf(mode);
+ }
+
+ public void cycle() {
+ if(index < modes.size() - 1) {
+ index++;
+ } else {
+ index = 0;
+ }
+ }
+
+
+}
diff --git a/src/minecraft/animeware/util/settings/NumberSetting.java b/src/minecraft/animeware/util/settings/NumberSetting.java
new file mode 100644
index 0000000..8024bd1
--- /dev/null
+++ b/src/minecraft/animeware/util/settings/NumberSetting.java
@@ -0,0 +1,54 @@
+package animeware.util.settings;
+
+public class NumberSetting extends Setting {
+
+ public double value, minimum, maximum, increment;
+
+ public NumberSetting(String name, double value, double minimum, double maximum, double increment) {
+ this.name = name;
+ this.value = value;
+ this.minimum = minimum;
+ this.maximum = maximum;
+ this.increment = increment;
+ }
+
+ public double getValue() {
+ return value;
+ }
+
+ public void setValue(double value) {
+ double precision = 1 / increment;
+ this.value = Math.round(Math.max(minimum, Math.min(maximum, value)) * precision) / precision;
+ }
+
+ public void increment(boolean positive) {
+ setValue(getValue() + (positive ? 1 : -1) * increment);
+ }
+
+ public double getMinimum() {
+ return minimum;
+ }
+
+ public void setMinimum(double minimum) {
+ this.minimum = minimum;
+ }
+
+ public double getMaximum() {
+ return maximum;
+ }
+
+ public void setMaximum(double maximum) {
+ this.maximum = maximum;
+ }
+
+ public double getIncrement() {
+ return increment;
+ }
+
+ public void setIncrement(double increment) {
+ this.increment = increment;
+ }
+
+
+
+}
diff --git a/src/minecraft/animeware/util/settings/Setting.java b/src/minecraft/animeware/util/settings/Setting.java
new file mode 100644
index 0000000..fd63a4b
--- /dev/null
+++ b/src/minecraft/animeware/util/settings/Setting.java
@@ -0,0 +1,7 @@
+package animeware.util.settings;
+
+public class Setting {
+
+ public String name;
+
+}
diff --git a/src/minecraft/animeware/util/settings/comp/BooleanButton.java b/src/minecraft/animeware/util/settings/comp/BooleanButton.java
new file mode 100644
index 0000000..7d96cb0
--- /dev/null
+++ b/src/minecraft/animeware/util/settings/comp/BooleanButton.java
@@ -0,0 +1,74 @@
+package animeware.util.settings.comp;
+
+import java.awt.Color;
+
+import org.lwjgl.input.Mouse;
+
+import animeware.hud.mod.HudMod;
+import animeware.util.render.ColorMode;
+import animeware.util.render.DrawUtil;
+import animeware.util.settings.BooleanSetting;
+import animeware.util.settings.Setting;
+import net.minecraft.client.Minecraft;
+
+public class BooleanButton {
+
+
+ private HudMod mod;
+
+ private Minecraft mc = Minecraft.getMinecraft();
+
+ private boolean pressed;
+ private static boolean hovered;
+ private static boolean hovered2;
+
+ public static int x;
+ public static int y;
+ private int width;
+ private int height;
+
+ private BooleanSetting bool;
+
+ private int pressColor = new Color(0, 255, 0 ,255).getRGB();
+ private int neutralColor = new Color(255, 0, 0, 100).getRGB();
+
+ public BooleanButton(int mouseX, int mouseY, int x, int y, BooleanSetting bool, HudMod mod, int buttonId) {
+ this.x = x;
+ this.y = y;
+ this.width = 100;
+ this.height = 25;
+ this.mod = mod;
+ this.bool = bool;
+
+ if(!mod.settings.isEmpty()) {
+ for(Setting setting : mod.settings) {
+ if(setting instanceof BooleanSetting) {
+ BooleanSetting boolsett = (BooleanSetting) setting;
+ //Gui.drawRect(this.x, this.y, this.x + this.width, this.y + this.height, color);
+ DrawUtil.drawBorderedRoundedRect(x, y, x + this.width, y + this.height, 10, 1, getWearingColor(bool), ColorMode.getModColor()); // 0, 0, 0, 255
+ mc.fontRendererObj.drawString(boolsett.name, x + 13, y + 8, boolsett.isEnabled() ? new Color(0, 255, 0, 255).getRGB() : new Color(255, 0, 0, 255).getRGB());
+ this.pressed = (Mouse.getEventButton() == 0) && (this.hovered2 == true) && (Mouse.getEventButtonState() == true);
+ }
+ }
+ }
+ }
+
+
+ private int getWearingColor(BooleanSetting bool) {
+ if(bool.isEnabled()) {
+ return new Color(0, 255, 0, 255).getRGB();
+ } else {
+ return new Color(255, 0, 0, 255).getRGB();
+ }
+ }
+
+ public static boolean isHovered2() {
+ return hovered2;
+ }
+
+ public static boolean isHovered(int mouseX, int mouseY) {
+ if(mouseX >= x && mouseX <= x + 100 && mouseY >= y && mouseY <= y + 25) {
+ return true;
+ } else return false;
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/util/settings/comp/ModeButton.java b/src/minecraft/animeware/util/settings/comp/ModeButton.java
new file mode 100644
index 0000000..088eec6
--- /dev/null
+++ b/src/minecraft/animeware/util/settings/comp/ModeButton.java
@@ -0,0 +1,71 @@
+package animeware.util.settings.comp;
+
+import java.awt.Color;
+
+import org.lwjgl.input.Mouse;
+
+import animeware.hud.mod.HudMod;
+import animeware.util.render.ColorMode;
+import animeware.util.render.DrawUtil;
+import animeware.util.render.RoundedUtils;
+import animeware.util.render.theme.CurrentTheme;
+import animeware.util.settings.ModeSetting;
+import animeware.util.settings.Setting;
+import net.minecraft.client.Minecraft;
+
+public class ModeButton {
+
+
+ private HudMod mod;
+
+ private Minecraft mc = Minecraft.getMinecraft();
+
+ private boolean pressed;
+ private static boolean hovered;
+ private static boolean hovered2;
+
+ public static int x;
+ public static int y;
+ private int width;
+ private int height;
+
+ private ModeSetting mode;
+
+ private int pressColor = new Color(0, 255, 0 ,255).getRGB();
+ private int neutralColor = new Color(255, 0, 0, 100).getRGB();
+
+ public ModeButton(int mouseX, int mouseY, int x, int y, ModeSetting mode, HudMod mod, int buttonId) {
+ this.x = x;
+ this.y = y;
+ this.width = 100;
+ this.height = 25;
+ this.mod = mod;
+ this.mode = mode;
+
+ if(!mod.settings.isEmpty()) {
+ for(Setting setting : mod.settings) {
+ if(setting instanceof ModeSetting) {
+ ModeSetting modesett = (ModeSetting) setting;
+
+ //Gui.drawRect(this.x, this.y, this.x + this.width, this.y + this.height, color);
+ DrawUtil.drawBorderedRoundedRect(x, y, x + this.width - 17, y + this.height, 10, 1, ColorMode.getSettingButtonAqua(), ColorMode.getSettingButtonAquaInside());
+ mc.fontRendererObj.drawString(modesett.name + ": " + modesett.getMode(), x + 13, y + 8, new Color(254, 255, 255, 255).getRGB());
+ //DrawUtil.drawBorderedRoundedRect(x, y, x + this.width, y + this.height, 10, 1, ColorMode.getSettingButtonAqua(), ColorMode.getSettingButtonAquaInside()); // 0, 0, 0, 255
+
+
+ this.pressed = (Mouse.getEventButton() == 0) && (this.hovered2 == true) && (Mouse.getEventButtonState() == true);
+ }
+ }
+ }
+ }
+
+ public static boolean isHovered2() {
+ return hovered2;
+ }
+
+ public static boolean isHovered(int mouseX, int mouseY) {
+ if(mouseX >= x && mouseX <= x + 100 && mouseY >= y && mouseY <= y + 25) {
+ return true;
+ } else return false;
+ }
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/util/timer/TimerUtil.java b/src/minecraft/animeware/util/timer/TimerUtil.java
new file mode 100644
index 0000000..2e41711
--- /dev/null
+++ b/src/minecraft/animeware/util/timer/TimerUtil.java
@@ -0,0 +1,38 @@
+package animeware.util.timer;
+
+
+
+public class TimerUtil {
+
+ public long lastMS = System.currentTimeMillis();
+
+
+ public void reset() {
+ lastMS = System.currentTimeMillis();
+ }
+
+
+ public boolean hasTimeElapsed(long time, boolean reset) {
+ if (System.currentTimeMillis() - lastMS > time) {
+ if (reset) reset();
+ return true;
+ }
+
+ return false;
+ }
+
+
+ public boolean hasTimeElapsed(long time) {
+ return System.currentTimeMillis() - lastMS > time;
+ }
+
+
+ public long getTime() {
+ return System.currentTimeMillis() - lastMS;
+ }
+
+ public void setTime(long time) {
+ lastMS = time;
+ }
+
+}
diff --git a/src/minecraft/animeware/util/websockets/SocketClient.java b/src/minecraft/animeware/util/websockets/SocketClient.java
new file mode 100644
index 0000000..eead770
--- /dev/null
+++ b/src/minecraft/animeware/util/websockets/SocketClient.java
@@ -0,0 +1,107 @@
+package animeware.util.websockets;
+
+import java.io.IOException;
+import co.gongzh.procbridge.Client;
+import net.minecraft.client.Minecraft;
+
+import java.net.ServerSocket;
+
+import animeware.NightSky;
+
+public class SocketClient {
+
+ public static final Client client = new Client("127.0.0.1", 7331); //130.61.181.86
+
+ public static void main(String[] args) {
+ //client.request("startmonsoon", "its_quick:quick:true");
+
+ //client.request("isUser", "its_quick");
+ /*String[] arguments = client.request("isUser", "its_quick").toString().split(":");
+ if(arguments[0].equals("true")) {
+ System.out.println("returned as true");
+ } else if (arguments[0].equals("false")) {
+ System.out.println("returned as false");
+ }*/
+
+ while(true) {
+ //client.getHost()
+ }
+ }
+
+ public static Object sendRequest(String... args) {
+ return client.request("echo", String.join(" ", args));
+ }
+
+ public static boolean isUser(String username) {
+ //if(NightSky.hasSent == false) {
+ String[] arguments = client.request("isUser", username).toString().split(":");
+ if(arguments[0].equals("true")) {
+ NightSky.isUser = true;
+ //System.out.println("returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("there was an error for " + username);
+ return false;
+ }
+
+
+
+ }
+ public static boolean isOwner(String username) {
+ String[] arguments = client.request("isOwner", username).toString().split(":");
+ if(arguments[0].equals("trueowner")) {
+ //System.out.println("returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isDev(String username) {
+ String[] arguments = client.request("isDev", username).toString().split(":");
+ if(arguments[0].equals("truedev")) {
+ //System.out.println("returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("there was an error for " + username);
+ return false;
+ }
+ }
+ public static boolean isPurple(String username) {
+ String[] arguments = client.request("isPurple", username).toString().split(":");
+ if(arguments[0].equals("truepurple")) {
+ //System.out.println("returned as true for user " + username);
+ return true;
+ } else if (arguments[0].equals("false")) {
+ //System.out.println("returned as false for user " + username);
+ return false;
+ } else {
+ System.out.println("there was an error for " + username);
+ return false;
+ }
+ }
+
+
+ public static double randomNumber(double max, double min) {
+ return (Math.random() * (max - min)) + min;
+ }
+ public static String isUserResult() {
+ if(NightSky.results == false) {
+ if(isUser(Minecraft.getMinecraft().thePlayer.getName()) == true) {
+ return "true";
+ } else
+ return "false";
+ }
+ return null;
+ }
+
+}
\ No newline at end of file
diff --git a/src/minecraft/animeware/util/websockets/user/CheckName.java b/src/minecraft/animeware/util/websockets/user/CheckName.java
new file mode 100644
index 0000000..3df16a8
--- /dev/null
+++ b/src/minecraft/animeware/util/websockets/user/CheckName.java
@@ -0,0 +1,34 @@
+package animeware.util.websockets.user;
+
+import animeware.NightSky;
+import animeware.ui.login.LoginScreen;
+import animeware.util.misc.Identification;
+import animeware.util.websockets.SocketClient;
+import net.minecraft.client.Minecraft;
+
+public class CheckName {
+
+ Minecraft mc = Minecraft.getMinecraft();
+
+ public static void DoCheckNameOnLogin() {
+ NightSky.hasSent = false;
+ }
+ public static void DoCheckName() {
+
+ System.out.println(SocketClient.client.request("start_animeware", Minecraft.getMinecraft().thePlayer.getGameProfile().getName() + ":true"));
+ System.out.println(SocketClient.client.request("start_animeware", Minecraft.getMinecraft().thePlayer.getGameProfile().getName() + ":trueowner"));
+ System.out.println(SocketClient.client.request("start_animeware", Minecraft.getMinecraft().thePlayer.getGameProfile().getName() + ":truedev"));
+ System.out.println(SocketClient.client.request("start_animeware", Minecraft.getMinecraft().thePlayer.getGameProfile().getName() + ":truepurple"));
+
+ }
+ public static void DoShutDownCheck() {
+
+ System.out.println(SocketClient.client.request("stop_animeware", Minecraft.getMinecraft().thePlayer.getGameProfile().getName() + ":true"));
+ //System.out.println(SocketClient.client.request("stop_animeware_owner", Minecraft.getMinecraft().thePlayer.getGameProfile().getName() + ":trueowner"));
+ //System.out.println(SocketClient.client.request("stop_animeware_dev", Minecraft.getMinecraft().thePlayer.getGameProfile().getName() + ":truedev"));
+ //System.out.println(SocketClient.client.request("stop_animeware_purple", Minecraft.getMinecraft().thePlayer.getGameProfile().getName() + ":truepurple"));
+
+
+ }
+
+}
diff --git a/src/minecraft/animeware/util/websockets/user/NightSkyUser.java b/src/minecraft/animeware/util/websockets/user/NightSkyUser.java
new file mode 100644
index 0000000..fb2f77e
--- /dev/null
+++ b/src/minecraft/animeware/util/websockets/user/NightSkyUser.java
@@ -0,0 +1,33 @@
+package animeware.util.websockets.user;
+
+public class NightSkyUser {
+
+ public String mcName;
+ public boolean isUser;
+
+ public NightSkyUser(String mcName, boolean isUser) {;
+ this.mcName = mcName;
+ this.isUser = isUser;
+ }
+
+ public String getProperties() {
+ return mcName + ":" + (isUser ? "true" : "false");
+ }
+
+ public String getMcName() {
+ return mcName;
+ }
+
+ public boolean isUser() {
+ return isUser;
+ }
+
+ public void setMcName(String mcName) {
+ this.mcName = mcName;
+ }
+
+
+ public void setUser(boolean user) {
+ isUser = user;
+ }
+}
diff --git a/src/minecraft/assets/minecraft/Animeware/Microsoft.png b/src/minecraft/assets/minecraft/Animeware/Microsoft.png
new file mode 100644
index 0000000..af86e90
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/Microsoft.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg1.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg1.jpg
new file mode 100644
index 0000000..7adea0e
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg1.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg10.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg10.jpg
new file mode 100644
index 0000000..8f5bb8c
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg10.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg11.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg11.jpg
new file mode 100644
index 0000000..813ae9d
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg11.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg12.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg12.jpg
new file mode 100644
index 0000000..e6fb4ec
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg12.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg13.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg13.jpg
new file mode 100644
index 0000000..22ad97a
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg13.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg14.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg14.jpg
new file mode 100644
index 0000000..51b54a4
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg14.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg15.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg15.jpg
new file mode 100644
index 0000000..22dd2c9
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg15.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg16.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg16.jpg
new file mode 100644
index 0000000..fbdf913
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg16.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg17.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg17.jpg
new file mode 100644
index 0000000..74fd564
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg17.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg18.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg18.jpg
new file mode 100644
index 0000000..4d82cde
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg18.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg19.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg19.jpg
new file mode 100644
index 0000000..bc00c3c
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg19.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg2.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg2.jpg
new file mode 100644
index 0000000..3df1559
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg2.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg2.png b/src/minecraft/assets/minecraft/Animeware/background/old/bg2.png
new file mode 100644
index 0000000..8d70b25
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg2.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg20.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg20.jpg
new file mode 100644
index 0000000..44d03cc
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg20.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg21.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg21.jpg
new file mode 100644
index 0000000..fc3bcef
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg21.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg22.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg22.jpg
new file mode 100644
index 0000000..95a6a32
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg22.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg23.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg23.jpg
new file mode 100644
index 0000000..1b3a2e2
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg23.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg24.png b/src/minecraft/assets/minecraft/Animeware/background/old/bg24.png
new file mode 100644
index 0000000..46576ee
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg24.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg25.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg25.jpg
new file mode 100644
index 0000000..70f57ed
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg25.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg26.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg26.jpg
new file mode 100644
index 0000000..5a27696
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg26.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg2l.png b/src/minecraft/assets/minecraft/Animeware/background/old/bg2l.png
new file mode 100644
index 0000000..47575b9
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg2l.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg2logo.png b/src/minecraft/assets/minecraft/Animeware/background/old/bg2logo.png
new file mode 100644
index 0000000..d7efe5b
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg2logo.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg3.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg3.jpg
new file mode 100644
index 0000000..85c49a2
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg3.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg4.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg4.jpg
new file mode 100644
index 0000000..ed7d05c
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg4.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg5.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg5.jpg
new file mode 100644
index 0000000..a7efbcb
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg5.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg5.png b/src/minecraft/assets/minecraft/Animeware/background/old/bg5.png
new file mode 100644
index 0000000..b207829
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg5.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg6.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg6.jpg
new file mode 100644
index 0000000..daea7ef
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg6.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg69.png b/src/minecraft/assets/minecraft/Animeware/background/old/bg69.png
new file mode 100644
index 0000000..fd88ad6
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg69.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg7.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg7.jpg
new file mode 100644
index 0000000..1fb01b0
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg7.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg8.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg8.jpg
new file mode 100644
index 0000000..9d75881
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg8.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bg9.jpg b/src/minecraft/assets/minecraft/Animeware/background/old/bg9.jpg
new file mode 100644
index 0000000..3404895
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bg9.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/background/old/bgblur.png b/src/minecraft/assets/minecraft/Animeware/background/old/bgblur.png
new file mode 100644
index 0000000..ef836b9
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/background/old/bgblur.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/bandana.pdn b/src/minecraft/assets/minecraft/Animeware/bandana.pdn
new file mode 100644
index 0000000..1cf6382
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/bandana.pdn differ
diff --git a/src/minecraft/assets/minecraft/Animeware/bandana.png b/src/minecraft/assets/minecraft/Animeware/bandana.png
new file mode 100644
index 0000000..0ca0ad6
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/bandana.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/blur.json b/src/minecraft/assets/minecraft/Animeware/blur.json
new file mode 100644
index 0000000..cee54f4
--- /dev/null
+++ b/src/minecraft/assets/minecraft/Animeware/blur.json
@@ -0,0 +1,87 @@
+{
+ "targets": [
+ "swap"
+ ],
+ "passes": [
+ {
+ "name": "blur",
+ "intarget": "minecraft:main",
+ "outtarget": "swap",
+ "uniforms": [
+ {
+ "name": "BlurDir",
+ "values": [
+ 1.0,
+ 0.0
+ ]
+ },
+ {
+ "name": "Radius",
+ "values": [
+ 5.0
+ ]
+ }
+ ]
+ },
+ {
+ "name": "blur",
+ "intarget": "swap",
+ "outtarget": "minecraft:main",
+ "uniforms": [
+ {
+ "name": "BlurDir",
+ "values": [
+ 0.0,
+ 1.0
+ ]
+ },
+ {
+ "name": "Radius",
+ "values": [
+ 5.0
+ ]
+ }
+ ]
+ },
+ {
+ "name": "blur",
+ "intarget": "swap",
+ "outtarget": "minecraft:main",
+ "uniforms": [
+ {
+ "name": "BlurDir",
+ "values": [
+ -1.0,
+ 0.0
+ ]
+ },
+ {
+ "name": "Radius",
+ "values": [
+ 5.0
+ ]
+ }
+ ]
+ },
+ {
+ "name": "blur",
+ "intarget": "swap",
+ "outtarget": "minecraft:main",
+ "uniforms": [
+ {
+ "name": "BlurDir",
+ "values": [
+ 0.0,
+ -1.0
+ ]
+ },
+ {
+ "name": "Radius",
+ "values": [
+ 5.0
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/HexenHut.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/HexenHut.png
new file mode 100644
index 0000000..ba8b8b4
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/HexenHut.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/blaze.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/blaze.png
new file mode 100644
index 0000000..044134a
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/blaze.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/blaze2.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/blaze2.png
new file mode 100644
index 0000000..6ba52fa
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/blaze2.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/2.jpg b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/2.jpg
new file mode 100644
index 0000000..2274363
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/2.jpg differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/idiolgameover.webp b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/idiolgameover.webp
new file mode 100644
index 0000000..30f070e
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/idiolgameover.webp differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/0.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/0.png
new file mode 100644
index 0000000..6cf219f
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/0.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/1.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/1.png
new file mode 100644
index 0000000..1010de3
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/1.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/10.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/10.png
new file mode 100644
index 0000000..94231ed
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/10.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/11.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/11.png
new file mode 100644
index 0000000..17d306f
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/11.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/12.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/12.png
new file mode 100644
index 0000000..4306c08
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/12.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/13.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/13.png
new file mode 100644
index 0000000..e422c8c
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/13.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/14.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/14.png
new file mode 100644
index 0000000..ea54dd6
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/14.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/15.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/15.png
new file mode 100644
index 0000000..f48e675
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/15.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/2.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/2.png
new file mode 100644
index 0000000..b2865f8
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/2.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/3.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/3.png
new file mode 100644
index 0000000..561455b
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/3.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/4.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/4.png
new file mode 100644
index 0000000..a15fda5
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/4.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/5.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/5.png
new file mode 100644
index 0000000..939bca4
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/5.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/6.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/6.png
new file mode 100644
index 0000000..d99ac95
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/6.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/7.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/7.png
new file mode 100644
index 0000000..bac2441
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/7.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/8.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/8.png
new file mode 100644
index 0000000..6c55c04
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/8.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/9.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/9.png
new file mode 100644
index 0000000..34fde3e
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/rinnegan/9.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/sunsetlakepurple.webp b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/sunsetlakepurple.webp
new file mode 100644
index 0000000..b38809f
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/sunsetlakepurple.webp differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/sunsetlakepurple.webp.mcmeta b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/sunsetlakepurple.webp.mcmeta
new file mode 100644
index 0000000..cdd55a6
--- /dev/null
+++ b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/sunsetlakepurple.webp.mcmeta
@@ -0,0 +1 @@
+{ "animation": {"frametime": 2, "width": 176, "height": 136 } }
\ No newline at end of file
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/xenbeneonlights.webp b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/xenbeneonlights.webp
new file mode 100644
index 0000000..c5189b2
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/xenbeneonlights.webp differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/xenbeneonlights.webp.mcmeta b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/xenbeneonlights.webp.mcmeta
new file mode 100644
index 0000000..ac5b673
--- /dev/null
+++ b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/xenbeneonlights.webp.mcmeta
@@ -0,0 +1 @@
+{ "animation": {"frametime": 3, "width": 88, "height": 68 } }
\ No newline at end of file
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/xshatterbiobay.webp b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/xshatterbiobay.webp
new file mode 100644
index 0000000..0d0cdea
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/xshatterbiobay.webp differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/xshatterbiobay.webp.mcmeta b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/xshatterbiobay.webp.mcmeta
new file mode 100644
index 0000000..ac5b673
--- /dev/null
+++ b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/xshatterbiobay.webp.mcmeta
@@ -0,0 +1 @@
+{ "animation": {"frametime": 3, "width": 88, "height": 68 } }
\ No newline at end of file
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/yuseipurpleeye.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/yuseipurpleeye.png
new file mode 100644
index 0000000..b3f7687
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/yuseipurpleeye.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/yuseipurpleeye.png.mcmeta b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/yuseipurpleeye.png.mcmeta
new file mode 100644
index 0000000..1586708
--- /dev/null
+++ b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/yuseipurpleeye.png.mcmeta
@@ -0,0 +1 @@
+{ "animation": {"frametime": 2, "width": 88, "height": 68 } }
\ No newline at end of file
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/yuseipurpleeye.webp b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/yuseipurpleeye.webp
new file mode 100644
index 0000000..9ef3ea0
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/yuseipurpleeye.webp differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/zovapurple.webp b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/zovapurple.webp
new file mode 100644
index 0000000..bbf1c9d
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/zovapurple.webp differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/zovapurple.webp.mcmeta b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/zovapurple.webp.mcmeta
new file mode 100644
index 0000000..1586708
--- /dev/null
+++ b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ani/zovapurple.webp.mcmeta
@@ -0,0 +1 @@
+{ "animation": {"frametime": 2, "width": 88, "height": 68 } }
\ No newline at end of file
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/blank.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/blank.png
new file mode 100644
index 0000000..047150a
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/blank.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/cape.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/cape.png
new file mode 100644
index 0000000..77307b4
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/cape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/darkcape.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/darkcape.png
new file mode 100644
index 0000000..ad49fc8
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/darkcape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/devcape.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/devcape.png
new file mode 100644
index 0000000..244301f
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/devcape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/discord/sparkofyt2cape.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/discord/sparkofyt2cape.png
new file mode 100644
index 0000000..89683ac
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/discord/sparkofyt2cape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/discord/sparkofytcape.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/discord/sparkofytcape.png
new file mode 100644
index 0000000..9728d11
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/discord/sparkofytcape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/dseyes2cape.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/dseyes2cape.png
new file mode 100644
index 0000000..4ccba00
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/dseyes2cape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/dseyescape.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/dseyescape.png
new file mode 100644
index 0000000..5737f72
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/dseyescape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/emeraldcape.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/emeraldcape.png
new file mode 100644
index 0000000..e238f02
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/emeraldcape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ghostlyflame.webp b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ghostlyflame.webp
new file mode 100644
index 0000000..2274363
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ghostlyflame.webp differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/gradientblack.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/gradientblack.png
new file mode 100644
index 0000000..1ffe875
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/gradientblack.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/gradientblue.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/gradientblue.png
new file mode 100644
index 0000000..e353625
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/gradientblue.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/gradientgreen.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/gradientgreen.png
new file mode 100644
index 0000000..ef2bd3f
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/gradientgreen.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/gradientpurple.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/gradientpurple.png
new file mode 100644
index 0000000..43895c6
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/gradientpurple.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/gradientred.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/gradientred.png
new file mode 100644
index 0000000..cdba006
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/gradientred.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/kocho2cape.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/kocho2cape.png
new file mode 100644
index 0000000..14eb289
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/kocho2cape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/kocho3cape.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/kocho3cape.png
new file mode 100644
index 0000000..0173e2a
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/kocho3cape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/kochocape.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/kochocape.png
new file mode 100644
index 0000000..b75907a
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/kochocape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/lcape.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/lcape.png
new file mode 100644
index 0000000..3070c5b
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/lcape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/lunarstaffblack.webp b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/lunarstaffblack.webp
new file mode 100644
index 0000000..5d2c320
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/lunarstaffblack.webp differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/nitro.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/nitro.png
new file mode 100644
index 0000000..792b58e
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/nitro.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ownercape.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ownercape.png
new file mode 100644
index 0000000..1282cf4
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ownercape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ozhay.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ozhay.png
new file mode 100644
index 0000000..91b752d
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/ozhay.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/planetscape.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/planetscape.png
new file mode 100644
index 0000000..4f479f2
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/planetscape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/quav_cape.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/quav_cape.png
new file mode 100644
index 0000000..5801060
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/quav_cape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/quick.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/quick.png
new file mode 100644
index 0000000..4e4abde
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/quick.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/reptyll.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/reptyll.png
new file mode 100644
index 0000000..ba73f5f
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/reptyll.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/swordcape.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/swordcape.png
new file mode 100644
index 0000000..c7b01e9
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/swordcape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/tanjirocape.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/tanjirocape.png
new file mode 100644
index 0000000..63486db
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/tanjirocape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/wintercape.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/wintercape.png
new file mode 100644
index 0000000..7298ac4
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/wintercape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/yt.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/yt.png
new file mode 100644
index 0000000..a7261ec
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/capes/yt.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/creeper_armor.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/creeper_armor.png
new file mode 100644
index 0000000..6ee536e
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/creeper_armor.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/crystal.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/crystal.png
new file mode 100644
index 0000000..164bb7e
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/crystal.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/dwings.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/dwings.png
new file mode 100644
index 0000000..d799ba9
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/dwings.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/enchantGlint.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/enchantGlint.png
new file mode 100644
index 0000000..f9ca97c
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/enchantGlint.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/endercrystal.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/endercrystal.png
new file mode 100644
index 0000000..1d3a168
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/endercrystal.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/guardian.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/guardian.png
new file mode 100644
index 0000000..f904a20
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/guardian.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/gwings.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/gwings.png
new file mode 100644
index 0000000..6b4033d
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/gwings.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/gwings1.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/gwings1.png
new file mode 100644
index 0000000..a6dc8dd
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/gwings1.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/hat.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/hat.png
new file mode 100644
index 0000000..f0608fc
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/hat.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/slime.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/slime.png
new file mode 100644
index 0000000..7b3e9ba
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/slime.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/susanno.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/susanno.png
new file mode 100644
index 0000000..35cf898
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/susanno.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/wings.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/wings.png
new file mode 100644
index 0000000..63bec98
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/wings.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/cosmetic/wolfModel.png b/src/minecraft/assets/minecraft/Animeware/cosmetic/wolfModel.png
new file mode 100644
index 0000000..028105b
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/cosmetic/wolfModel.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/1font.ttf b/src/minecraft/assets/minecraft/Animeware/font/1font.ttf
new file mode 100644
index 0000000..da60214
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/1font.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/2font.ttf b/src/minecraft/assets/minecraft/Animeware/font/2font.ttf
new file mode 100644
index 0000000..206c25b
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/2font.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/3font.ttf b/src/minecraft/assets/minecraft/Animeware/font/3font.ttf
new file mode 100644
index 0000000..d843e57
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/3font.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/AntipastoPro-Extralight_trial.ttf b/src/minecraft/assets/minecraft/Animeware/font/AntipastoPro-Extralight_trial.ttf
new file mode 100644
index 0000000..0def797
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/AntipastoPro-Extralight_trial.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/AntipastoPro-Hairline_trial.ttf b/src/minecraft/assets/minecraft/Animeware/font/AntipastoPro-Hairline_trial.ttf
new file mode 100644
index 0000000..def9e39
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/AntipastoPro-Hairline_trial.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/AntipastoPro-Light_trial.ttf b/src/minecraft/assets/minecraft/Animeware/font/AntipastoPro-Light_trial.ttf
new file mode 100644
index 0000000..fa7b0b4
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/AntipastoPro-Light_trial.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/AntipastoPro-Thin_trial 2.ttf b/src/minecraft/assets/minecraft/Animeware/font/AntipastoPro-Thin_trial 2.ttf
new file mode 100644
index 0000000..c5b824f
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/AntipastoPro-Thin_trial 2.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/AntipastoPro-Thin_trial.ttf b/src/minecraft/assets/minecraft/Animeware/font/AntipastoPro-Thin_trial.ttf
new file mode 100644
index 0000000..81c1204
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/AntipastoPro-Thin_trial.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/AntipastoPro_trial.ttf b/src/minecraft/assets/minecraft/Animeware/font/AntipastoPro_trial.ttf
new file mode 100644
index 0000000..1087b3f
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/AntipastoPro_trial.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/banks.ttf b/src/minecraft/assets/minecraft/Animeware/font/banks.ttf
new file mode 100644
index 0000000..73ed595
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/banks.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/bold+.ttf b/src/minecraft/assets/minecraft/Animeware/font/bold+.ttf
new file mode 100644
index 0000000..21f6f84
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/bold+.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/bold.ttf b/src/minecraft/assets/minecraft/Animeware/font/bold.ttf
new file mode 100644
index 0000000..fd79d43
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/bold.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/cedo.ttf b/src/minecraft/assets/minecraft/Animeware/font/cedo.ttf
new file mode 100644
index 0000000..4ee2f0e
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/cedo.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/check.ttf b/src/minecraft/assets/minecraft/Animeware/font/check.ttf
new file mode 100644
index 0000000..3b6bb6e
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/check.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/desktop.ini b/src/minecraft/assets/minecraft/Animeware/font/desktop.ini
new file mode 100644
index 0000000..2901dc4
--- /dev/null
+++ b/src/minecraft/assets/minecraft/Animeware/font/desktop.ini
@@ -0,0 +1,2 @@
+[LocalizedFileNames]
+Comfortaa.ttf=@Comfortaa.ttf,0
diff --git a/src/minecraft/assets/minecraft/Animeware/font/font.ttf b/src/minecraft/assets/minecraft/Animeware/font/font.ttf
new file mode 100644
index 0000000..5e81491
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/font.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/icon.ttf b/src/minecraft/assets/minecraft/Animeware/font/icon.ttf
new file mode 100644
index 0000000..b73fae2
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/icon.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/light.ttf b/src/minecraft/assets/minecraft/Animeware/font/light.ttf
new file mode 100644
index 0000000..0d38189
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/light.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/neverlose.ttf b/src/minecraft/assets/minecraft/Animeware/font/neverlose.ttf
new file mode 100644
index 0000000..a753c30
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/neverlose.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/regular.ttf b/src/minecraft/assets/minecraft/Animeware/font/regular.ttf
new file mode 100644
index 0000000..db43334
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/regular.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/tenacity.ttf b/src/minecraft/assets/minecraft/Animeware/font/tenacity.ttf
new file mode 100644
index 0000000..2edf84b
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/tenacity.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/tenacitybold.ttf b/src/minecraft/assets/minecraft/Animeware/font/tenacitybold.ttf
new file mode 100644
index 0000000..9cc7c46
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/tenacitybold.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/font/thic.ttf b/src/minecraft/assets/minecraft/Animeware/font/thic.ttf
new file mode 100644
index 0000000..00af3a2
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/font/thic.ttf differ
diff --git a/src/minecraft/assets/minecraft/Animeware/gui/options_background.png b/src/minecraft/assets/minecraft/Animeware/gui/options_background.png
new file mode 100644
index 0000000..f8e8c6a
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/gui/options_background.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icon16.png b/src/minecraft/assets/minecraft/Animeware/icon16.png
new file mode 100644
index 0000000..7c6c62f
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icon16.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icon32.png b/src/minecraft/assets/minecraft/Animeware/icon32.png
new file mode 100644
index 0000000..f1a9ea9
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icon32.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/account.png b/src/minecraft/assets/minecraft/Animeware/icons/account.png
new file mode 100644
index 0000000..feb9bc4
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/account.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/armorstatus.png b/src/minecraft/assets/minecraft/Animeware/icons/armorstatus.png
new file mode 100644
index 0000000..5d9a259
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/armorstatus.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/asas.png b/src/minecraft/assets/minecraft/Animeware/icons/asas.png
new file mode 100644
index 0000000..181d086
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/asas.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/autotext.png b/src/minecraft/assets/minecraft/Animeware/icons/autotext.png
new file mode 100644
index 0000000..fa54f70
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/autotext.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/blank.png b/src/minecraft/assets/minecraft/Animeware/icons/blank.png
new file mode 100644
index 0000000..047150a
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/blank.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/blockoverlay.png b/src/minecraft/assets/minecraft/Animeware/icons/blockoverlay.png
new file mode 100644
index 0000000..600ed23
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/blockoverlay.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/bps.png b/src/minecraft/assets/minecraft/Animeware/icons/bps.png
new file mode 100644
index 0000000..b14d325
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/bps.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/cape.png b/src/minecraft/assets/minecraft/Animeware/icons/cape.png
new file mode 100644
index 0000000..efba44d
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/cape.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/caret-down.png b/src/minecraft/assets/minecraft/Animeware/icons/caret-down.png
new file mode 100644
index 0000000..af41707
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/caret-down.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/caret-left.png b/src/minecraft/assets/minecraft/Animeware/icons/caret-left.png
new file mode 100644
index 0000000..b7031ff
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/caret-left.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/caret-right.png b/src/minecraft/assets/minecraft/Animeware/icons/caret-right.png
new file mode 100644
index 0000000..e9c4d27
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/caret-right.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/cart.png b/src/minecraft/assets/minecraft/Animeware/icons/cart.png
new file mode 100644
index 0000000..5dc0f01
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/cart.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/close.png b/src/minecraft/assets/minecraft/Animeware/icons/close.png
new file mode 100644
index 0000000..45bcecc
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/close.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/combat.png b/src/minecraft/assets/minecraft/Animeware/icons/combat.png
new file mode 100644
index 0000000..62db096
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/combat.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/coordinates.png b/src/minecraft/assets/minecraft/Animeware/icons/coordinates.png
new file mode 100644
index 0000000..bd9c43d
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/coordinates.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/cos/nitro.png b/src/minecraft/assets/minecraft/Animeware/icons/cos/nitro.png
new file mode 100644
index 0000000..b3fd505
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/cos/nitro.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/cos/quick.png b/src/minecraft/assets/minecraft/Animeware/icons/cos/quick.png
new file mode 100644
index 0000000..0d48fca
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/cos/quick.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/cos/reptyl.png b/src/minecraft/assets/minecraft/Animeware/icons/cos/reptyl.png
new file mode 100644
index 0000000..da1cd15
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/cos/reptyl.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/cosmetics.png b/src/minecraft/assets/minecraft/Animeware/icons/cosmetics.png
new file mode 100644
index 0000000..a44a231
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/cosmetics.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/cosmeticsold.png b/src/minecraft/assets/minecraft/Animeware/icons/cosmeticsold.png
new file mode 100644
index 0000000..7581b35
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/cosmeticsold.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/cps.png b/src/minecraft/assets/minecraft/Animeware/icons/cps.png
new file mode 100644
index 0000000..e13c9a5
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/cps.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/direction.png b/src/minecraft/assets/minecraft/Animeware/icons/direction.png
new file mode 100644
index 0000000..7f18feb
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/direction.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/discord.png b/src/minecraft/assets/minecraft/Animeware/icons/discord.png
new file mode 100644
index 0000000..d87e425
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/discord.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/edit.png b/src/minecraft/assets/minecraft/Animeware/icons/edit.png
new file mode 100644
index 0000000..f52bedc
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/edit.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/exploit.png b/src/minecraft/assets/minecraft/Animeware/icons/exploit.png
new file mode 100644
index 0000000..dc7b879
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/exploit.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/fps.png b/src/minecraft/assets/minecraft/Animeware/icons/fps.png
new file mode 100644
index 0000000..4f6514a
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/fps.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/glacier/keystrokes.png b/src/minecraft/assets/minecraft/Animeware/icons/glacier/keystrokes.png
new file mode 100644
index 0000000..4cb2c99
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/glacier/keystrokes.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/glacier/ping.png b/src/minecraft/assets/minecraft/Animeware/icons/glacier/ping.png
new file mode 100644
index 0000000..b33c9dd
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/glacier/ping.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/glacier/reach.png b/src/minecraft/assets/minecraft/Animeware/icons/glacier/reach.png
new file mode 100644
index 0000000..90bf658
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/glacier/reach.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/glacier/timechanger.png b/src/minecraft/assets/minecraft/Animeware/icons/glacier/timechanger.png
new file mode 100644
index 0000000..a7b65ac
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/glacier/timechanger.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/home.png b/src/minecraft/assets/minecraft/Animeware/icons/home.png
new file mode 100644
index 0000000..410544a
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/home.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/hud.png b/src/minecraft/assets/minecraft/Animeware/icons/hud.png
new file mode 100644
index 0000000..cf618fe
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/hud.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/icon32.png b/src/minecraft/assets/minecraft/Animeware/icons/icon32.png
new file mode 100644
index 0000000..f64f2e9
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/icon32.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/iconWhite.png b/src/minecraft/assets/minecraft/Animeware/icons/iconWhite.png
new file mode 100644
index 0000000..d88e392
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/iconWhite.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/icon_16x16.png b/src/minecraft/assets/minecraft/Animeware/icons/icon_16x16.png
new file mode 100644
index 0000000..ff43c0b
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/icon_16x16.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/icon_32x32.png b/src/minecraft/assets/minecraft/Animeware/icons/icon_32x32.png
new file mode 100644
index 0000000..f2ba870
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/icon_32x32.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/idk.png b/src/minecraft/assets/minecraft/Animeware/icons/idk.png
new file mode 100644
index 0000000..70a8c3e
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/idk.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/image.png b/src/minecraft/assets/minecraft/Animeware/icons/image.png
new file mode 100644
index 0000000..4e696bd
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/image.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/imagedev.png b/src/minecraft/assets/minecraft/Animeware/icons/imagedev.png
new file mode 100644
index 0000000..5508de3
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/imagedev.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/info.png b/src/minecraft/assets/minecraft/Animeware/icons/info.png
new file mode 100644
index 0000000..10e44a1
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/info.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/itemphydsfsics.png b/src/minecraft/assets/minecraft/Animeware/icons/itemphydsfsics.png
new file mode 100644
index 0000000..6ea03ad
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/itemphydsfsics.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/itemphysics.png b/src/minecraft/assets/minecraft/Animeware/icons/itemphysics.png
new file mode 100644
index 0000000..ab725eb
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/itemphysics.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/keystrokes.png b/src/minecraft/assets/minecraft/Animeware/icons/keystrokes.png
new file mode 100644
index 0000000..1541c95
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/keystrokes.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/keystrokes2.png b/src/minecraft/assets/minecraft/Animeware/icons/keystrokes2.png
new file mode 100644
index 0000000..c0ef3c7
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/keystrokes2.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/language.png b/src/minecraft/assets/minecraft/Animeware/icons/language.png
new file mode 100644
index 0000000..0d94b7c
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/language.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/memoryusage.png b/src/minecraft/assets/minecraft/Animeware/icons/memoryusage.png
new file mode 100644
index 0000000..2a26d8e
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/memoryusage.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/misc.png b/src/minecraft/assets/minecraft/Animeware/icons/misc.png
new file mode 100644
index 0000000..0322ba6
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/misc.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/mods.png b/src/minecraft/assets/minecraft/Animeware/icons/mods.png
new file mode 100644
index 0000000..3650e19
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/mods.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/move_arrow.png b/src/minecraft/assets/minecraft/Animeware/icons/move_arrow.png
new file mode 100644
index 0000000..209e1ab
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/move_arrow.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/movement.png b/src/minecraft/assets/minecraft/Animeware/icons/movement.png
new file mode 100644
index 0000000..bb37ee4
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/movement.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/nickhider.png b/src/minecraft/assets/minecraft/Animeware/icons/nickhider.png
new file mode 100644
index 0000000..bcb3b62
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/nickhider.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/nightskywhiteicon.png b/src/minecraft/assets/minecraft/Animeware/icons/nightskywhiteicon.png
new file mode 100644
index 0000000..e84de43
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/nightskywhiteicon.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/oldanimations.png b/src/minecraft/assets/minecraft/Animeware/icons/oldanimations.png
new file mode 100644
index 0000000..1aa97e4
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/oldanimations.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/outline_LVL_white_48dp.png b/src/minecraft/assets/minecraft/Animeware/icons/outline_LVL_white_48dp.png
new file mode 100644
index 0000000..af741c7
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/outline_LVL_white_48dp.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/outline_add_box_white_48dp.png b/src/minecraft/assets/minecraft/Animeware/icons/outline_add_box_white_48dp.png
new file mode 100644
index 0000000..384415d
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/outline_add_box_white_48dp.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/outline_attach_money_white_48dp.png b/src/minecraft/assets/minecraft/Animeware/icons/outline_attach_money_white_48dp.png
new file mode 100644
index 0000000..ba2a6ac
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/outline_attach_money_white_48dp.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/outline_color_lens_white_48dp.png b/src/minecraft/assets/minecraft/Animeware/icons/outline_color_lens_white_48dp.png
new file mode 100644
index 0000000..42f37eb
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/outline_color_lens_white_48dp.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/outline_colorize_white_48dp.png b/src/minecraft/assets/minecraft/Animeware/icons/outline_colorize_white_48dp.png
new file mode 100644
index 0000000..7616527
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/outline_colorize_white_48dp.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/outline_flashlight_on_white_48dp.png b/src/minecraft/assets/minecraft/Animeware/icons/outline_flashlight_on_white_48dp.png
new file mode 100644
index 0000000..e31d065
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/outline_flashlight_on_white_48dp.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/outline_headset_mic_white_48dp.png b/src/minecraft/assets/minecraft/Animeware/icons/outline_headset_mic_white_48dp.png
new file mode 100644
index 0000000..818ec6e
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/outline_headset_mic_white_48dp.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/outline_invert_colors_white_48dp.png b/src/minecraft/assets/minecraft/Animeware/icons/outline_invert_colors_white_48dp.png
new file mode 100644
index 0000000..aebd0eb
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/outline_invert_colors_white_48dp.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/outline_keyboard_arrow_right_white_48dp.png b/src/minecraft/assets/minecraft/Animeware/icons/outline_keyboard_arrow_right_white_48dp.png
new file mode 100644
index 0000000..7c3c54c
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/outline_keyboard_arrow_right_white_48dp.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/outline_local_fire_department_white_48dp.png b/src/minecraft/assets/minecraft/Animeware/icons/outline_local_fire_department_white_48dp.png
new file mode 100644
index 0000000..031514d
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/outline_local_fire_department_white_48dp.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/outline_mod_settings_white_48dp.png b/src/minecraft/assets/minecraft/Animeware/icons/outline_mod_settings_white_48dp.png
new file mode 100644
index 0000000..db1e848
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/outline_mod_settings_white_48dp.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/outline_question_answer_white_48dp.png b/src/minecraft/assets/minecraft/Animeware/icons/outline_question_answer_white_48dp.png
new file mode 100644
index 0000000..23ef16f
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/outline_question_answer_white_48dp.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/outline_rounded_corner_white_48dp.png b/src/minecraft/assets/minecraft/Animeware/icons/outline_rounded_corner_white_48dp.png
new file mode 100644
index 0000000..ac96d46
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/outline_rounded_corner_white_48dp.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/outline_shift_bar_white_48dp.png b/src/minecraft/assets/minecraft/Animeware/icons/outline_shift_bar_white_48dp.png
new file mode 100644
index 0000000..f7dc9b8
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/outline_shift_bar_white_48dp.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/outline_shopping_cart_white_48dp.png b/src/minecraft/assets/minecraft/Animeware/icons/outline_shopping_cart_white_48dp.png
new file mode 100644
index 0000000..9efe419
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/outline_shopping_cart_white_48dp.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/outline_space_bar_white_48dp.png b/src/minecraft/assets/minecraft/Animeware/icons/outline_space_bar_white_48dp.png
new file mode 100644
index 0000000..c3141f4
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/outline_space_bar_white_48dp.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/packoverlay.png b/src/minecraft/assets/minecraft/Animeware/icons/packoverlay.png
new file mode 100644
index 0000000..e9476eb
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/packoverlay.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/pingdisplay.png b/src/minecraft/assets/minecraft/Animeware/icons/pingdisplay.png
new file mode 100644
index 0000000..ecd4692
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/pingdisplay.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/placeholder.png b/src/minecraft/assets/minecraft/Animeware/icons/placeholder.png
new file mode 100644
index 0000000..654cdc9
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/placeholder.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/play.png b/src/minecraft/assets/minecraft/Animeware/icons/play.png
new file mode 100644
index 0000000..d2969ed
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/play.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/positioning.png b/src/minecraft/assets/minecraft/Animeware/icons/positioning.png
new file mode 100644
index 0000000..465e1ae
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/positioning.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/potionhud.png b/src/minecraft/assets/minecraft/Animeware/icons/potionhud.png
new file mode 100644
index 0000000..a2c3db2
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/potionhud.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/quit.png b/src/minecraft/assets/minecraft/Animeware/icons/quit.png
new file mode 100644
index 0000000..7419596
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/quit.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/ram.png b/src/minecraft/assets/minecraft/Animeware/icons/ram.png
new file mode 100644
index 0000000..8a71d49
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/ram.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/search.png b/src/minecraft/assets/minecraft/Animeware/icons/search.png
new file mode 100644
index 0000000..8fb7d59
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/search.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/server.png b/src/minecraft/assets/minecraft/Animeware/icons/server.png
new file mode 100644
index 0000000..7abc02d
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/server.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/servers.png b/src/minecraft/assets/minecraft/Animeware/icons/servers.png
new file mode 100644
index 0000000..6cc740e
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/servers.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/settings.png b/src/minecraft/assets/minecraft/Animeware/icons/settings.png
new file mode 100644
index 0000000..5508de3
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/settings.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/shield.png b/src/minecraft/assets/minecraft/Animeware/icons/shield.png
new file mode 100644
index 0000000..49d1759
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/shield.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/shopping-cart.png b/src/minecraft/assets/minecraft/Animeware/icons/shopping-cart.png
new file mode 100644
index 0000000..16abf5d
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/shopping-cart.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/timechanger.png b/src/minecraft/assets/minecraft/Animeware/icons/timechanger.png
new file mode 100644
index 0000000..0e944bc
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/timechanger.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/timedisplay.png b/src/minecraft/assets/minecraft/Animeware/icons/timedisplay.png
new file mode 100644
index 0000000..c3c3cd8
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/timedisplay.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/toggle-off.png b/src/minecraft/assets/minecraft/Animeware/icons/toggle-off.png
new file mode 100644
index 0000000..4ca16e7
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/toggle-off.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/toggle-on.png b/src/minecraft/assets/minecraft/Animeware/icons/toggle-on.png
new file mode 100644
index 0000000..b4c478f
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/toggle-on.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/togglesasprint.png b/src/minecraft/assets/minecraft/Animeware/icons/togglesasprint.png
new file mode 100644
index 0000000..fba990c
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/togglesasprint.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/togglesprint.png b/src/minecraft/assets/minecraft/Animeware/icons/togglesprint.png
new file mode 100644
index 0000000..1a3673e
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/togglesprint.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/togglesprintold.png b/src/minecraft/assets/minecraft/Animeware/icons/togglesprintold.png
new file mode 100644
index 0000000..8f85fe6
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/togglesprintold.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/user.png b/src/minecraft/assets/minecraft/Animeware/icons/user.png
new file mode 100644
index 0000000..13da4f5
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/user.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/users.png b/src/minecraft/assets/minecraft/Animeware/icons/users.png
new file mode 100644
index 0000000..df1e0bd
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/users.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/xyz.png b/src/minecraft/assets/minecraft/Animeware/icons/xyz.png
new file mode 100644
index 0000000..8de4148
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/xyz.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/zonix/close.png b/src/minecraft/assets/minecraft/Animeware/icons/zonix/close.png
new file mode 100644
index 0000000..93fb503
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/zonix/close.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/zonix/down.png b/src/minecraft/assets/minecraft/Animeware/icons/zonix/down.png
new file mode 100644
index 0000000..af41707
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/zonix/down.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/zonix/left.png b/src/minecraft/assets/minecraft/Animeware/icons/zonix/left.png
new file mode 100644
index 0000000..b7031ff
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/zonix/left.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/zonix/mods.png b/src/minecraft/assets/minecraft/Animeware/icons/zonix/mods.png
new file mode 100644
index 0000000..3650e19
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/zonix/mods.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/zonix/play.png b/src/minecraft/assets/minecraft/Animeware/icons/zonix/play.png
new file mode 100644
index 0000000..d2969ed
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/zonix/play.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/zonix/right.png b/src/minecraft/assets/minecraft/Animeware/icons/zonix/right.png
new file mode 100644
index 0000000..e9c4d27
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/zonix/right.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/zonix/settings.png b/src/minecraft/assets/minecraft/Animeware/icons/zonix/settings.png
new file mode 100644
index 0000000..aca6840
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/zonix/settings.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/zonix/shield.png b/src/minecraft/assets/minecraft/Animeware/icons/zonix/shield.png
new file mode 100644
index 0000000..49d1759
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/zonix/shield.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/zonix/toggle-off.png b/src/minecraft/assets/minecraft/Animeware/icons/zonix/toggle-off.png
new file mode 100644
index 0000000..4ca16e7
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/zonix/toggle-off.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/zonix/toggle-on.png b/src/minecraft/assets/minecraft/Animeware/icons/zonix/toggle-on.png
new file mode 100644
index 0000000..b4c478f
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/zonix/toggle-on.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/zonix/user.png b/src/minecraft/assets/minecraft/Animeware/icons/zonix/user.png
new file mode 100644
index 0000000..13da4f5
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/zonix/user.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/icons/zonix/users.png b/src/minecraft/assets/minecraft/Animeware/icons/zonix/users.png
new file mode 100644
index 0000000..df1e0bd
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/icons/zonix/users.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/logo.pdn b/src/minecraft/assets/minecraft/Animeware/logo.pdn
new file mode 100644
index 0000000..bf1ad1d
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/logo.pdn differ
diff --git a/src/minecraft/assets/minecraft/Animeware/logo.png b/src/minecraft/assets/minecraft/Animeware/logo.png
new file mode 100644
index 0000000..1af57a2
Binary files /dev/null and b/src/minecraft/assets/minecraft/Animeware/logo.png differ
diff --git a/src/minecraft/assets/minecraft/Animeware/logonew.pdn b/src/minecraft/assets/minecraft/Animeware/logonew.pdn
new file mode 100644
index 0000000..31a6ae5
--- /dev/null
+++ b/src/minecraft/assets/minecraft/Animeware/logonew.pdn
@@ -0,0 +1,1158 @@
+PDN3_