diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..af1430b
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.gitignore b/.gitignore
index 32858aa..829bbce 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,4 @@
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
+/target/
diff --git a/.project b/.project
new file mode 100644
index 0000000..ea7b861
--- /dev/null
+++ b/.project
@@ -0,0 +1,23 @@
+
+
+ PlaceMinecraft2
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..f9fe345
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/=UTF-8
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..714351a
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..227126c
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,74 @@
+
+ 4.0.0
+
+ buttondevteam
+ PlaceMinecraft
+ 0.0.1-SNAPSHOT
+ jar
+
+ PlaceMinecraft
+ http://maven.apache.org
+
+
+ UTF-8
+
+
+
+ src/main/java
+
+
+ src
+
+ **/*.java
+
+
+
+ src/main/resources
+
+ *.properties
+ *.yml
+ *.csv
+ *.txt
+
+ true
+
+
+
+
+ maven-compiler-plugin
+ 3.3
+
+ 1.8
+ 1.8
+
+
+
+
+
+
+
+ spigot-repo
+ https://hub.spigotmc.org/nexus/content/repositories/snapshots/
+
+
+ jitpack.io
+ https://jitpack.io/
+
+
+
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+ org.spigotmc
+ spigot-api
+ 1.11.2-R0.1-SNAPSHOT
+ provided
+
+
+
diff --git a/src/main/java/buttondevteam/PlaceMinecraft2/App.java b/src/main/java/buttondevteam/PlaceMinecraft2/App.java
new file mode 100644
index 0000000..a48fa47
--- /dev/null
+++ b/src/main/java/buttondevteam/PlaceMinecraft2/App.java
@@ -0,0 +1,13 @@
+package buttondevteam.PlaceMinecraft2;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
diff --git a/src/main/java/buttondevteam/PlaceMinecraft2/PlaceWebSocket.java b/src/main/java/buttondevteam/PlaceMinecraft2/PlaceWebSocket.java
new file mode 100644
index 0000000..c6f8771
--- /dev/null
+++ b/src/main/java/buttondevteam/PlaceMinecraft2/PlaceWebSocket.java
@@ -0,0 +1,65 @@
+package buttondevteam.PlaceMinecraft2;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+
+public class PlaceWebSocket { //Ported from https://gist.github.com/teaearlgraycold/76877c8f262de24becc081ad96759730
+ private Gson json;
+ public JsonObject recv_frame()
+ {
+ //frame = super().recv_frame()
+ return json.fromJson(frame.data.decode('utf-8'));
+ }
+
+public void main()
+{ url = "wss://...";
+ ws = create_connection(url, class_=PlaceWebSocket);
+ insert_queue = 0
+ inserted_count = 0
+ max_queue_size = 100
+ save_frame_per = 20000
+
+ while(true)
+ { try
+ {
+ frame = ws.recv_frame();
+ print(frame);
+
+ if(frame['type'] == 'place')
+ {
+ c.execute('''INSERT INTO placements VALUES (?, ?, ?, ?, ?)''', [
+ int(time.time()),
+ frame['payload']['x'],
+ frame['payload']['y'],
+ frame['payload']['color'],
+ frame['payload']['author']
+ ])
+ insert_queue += 1
+ inserted_count += 1
+ }
+ else if(frame['type'] == 'activity')
+ {
+ c.execute('''INSERT INTO activity VALUES (?, ?)''', [
+ int(time.time()),
+ frame['payload']['count']
+ ])
+ insert_queue += 1
+ inserted_count += 1
+
+ if insert_queue >= max_queue_size:
+ conn.commit()
+ insert_queue = 0
+ if inserted_count % save_frame_per == 0:
+ save_bitmap(c, conn)
+ except KeyboardInterrupt:
+ print('Exiting safely...')
+ conn.commit()
+ conn.close()
+ sys.exit()
+ except Exception as e:
+ print('Error occured: {}'.format(str(e)))
+
+
+if __name__ == '__main__':
+ main()
+}
diff --git a/src/test/java/buttondevteam/PlaceMinecraft2/AppTest.java b/src/test/java/buttondevteam/PlaceMinecraft2/AppTest.java
new file mode 100644
index 0000000..d02f7b9
--- /dev/null
+++ b/src/test/java/buttondevteam/PlaceMinecraft2/AppTest.java
@@ -0,0 +1,38 @@
+package buttondevteam.PlaceMinecraft2;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+ extends TestCase
+{
+ /**
+ * Create the test case
+ *
+ * @param testName name of the test case
+ */
+ public AppTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite()
+ {
+ return new TestSuite( AppTest.class );
+ }
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testApp()
+ {
+ assertTrue( true );
+ }
+}