-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathexplanation.html
More file actions
413 lines (411 loc) · 22.2 KB
/
Copy pathexplanation.html
File metadata and controls
413 lines (411 loc) · 22.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="MCEULA Team">
<meta name=viewport content="width=device-width, initial-scale=1">
<meta name="description" content="An explanation on the Minecraft EULA and how it affects servers.">
<style>
body {
font-family: Helvetica, Arial;
overflow-x: hidden;
}
.content {
padding-left: 100px;
padding-right: 100px;
padding-bottom: 25px;
line-height: 1.5;
min-height: calc(100vh - 166px);
}
.InTheContent {
display: none;
}
.sidebar {
padding-top: 20px;
font-size: 14px;
align: center;
text-align: center;
margin-bottom: 0px;
padding-bottom: 0px;
}
.sidebar ul {
display:inline;
list-style-type: none;
}
.sidebar li {
display: inline;
padding-right: 20px;
white-space: nowrap;
}
h1, h2 {
margin-bottom: 10px;
}
h1 {
font-size: 40px;
}
.quote {
color: gray;
display: block;
border-left-width: 2px;
border-left-style: solid;
border-left-color: gray;
padding-left: 25px;
font-size: 15px;
}
ul.quote {
padding-left: 42px;
}
ol {
margin-bottom: 3px;
}
li {
padding-bottom: 5px;
}
a:link {
color: #1E90FF;
text-decoration:none;
}
a:hover {
color: #1E90FF;
text-decoration:underline;
}
a:visited {
color: #1E90FF;
text-decoration:none;
}
a.selected {
color: white;
border-radius: 30px;
background: #1E90FF;
padding: 2px 12px 4px 12px;
text-decoration: none;
}
img {
height: 250px;
width: 500px;
}
.navheader {
font-size: 20px;
padding-bottom: 10px;
padding-left: 20px;
color:white;
padding-top:17px;
}
header {
height: 50px;
border-bottom-width: 2px;
border-bottom-style: solid;
border-bottom-color: gray;
background: black;
margin: -20px -15px 0px -10px;
padding: 0px;
}
.navbar {
color: white;
float; left;
position: absolute;
padding-left: 50px;
float: center;
margin-top: 14px;
top: 0px;
left: 100px;
display: inline;
list-style-type: none;
text-align: center;
}
.header li {
display: inline;
padding-right: 25px;
}
.header a {
text-decoration: underline;
color: white;
}
.navheader a {
text-decoration: none;
}
.navheader a:hover {
text-decoration: none;
}
.footer {
background-color: purple;
height: 50px;
bottom: 0px;
margin-bottom: 0px;
position: relative;
border-top-style: solid;
border-top-color: #d442f4;
border-top-width: 5px;
}
.footer p {
color: white;
margin: 0 auto;
padding-top: 15px;
}
.container {
position: absolute;
width: 100%;
margin-left: -8px;
padding-top: 5px;
}
.pre {
background-color: #eff0f1;
font-family: monospace;
white-space: pre-wrap;
}
@media (max-width: 520px) {
.content {
font-size: 14px;
padding: 0px 0px 0px 100px;
padding-left: 5px;
}
.quote {
font-size: 14px;
}
.header {
font-size: 16px;
}
.footer {
font-size: 14px;
}
.quote {
font-size: 14px;
}
.sidebar li {
padding-right: 20px;
font-size: 14px;
}
.header li {
padding-right:5px;
}
h1 {
font-size: 30px;
}
.navbar {
padding-left: 15px;
font-size: 13px;
}
}
</style>
<title>The Minecraft EULA | The Negative Impacts on Servers</title>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-42113163-10', 'auto');
ga('send', 'pageview');
</script>
</head>
<body>
<div class="header">
<header>
<h1 class="navheader"><a href="">MCEULA:</a></h1>
<ul class="navbar">
<li><a href="">Home</a></li>
<li><a href="statistics">Statistics</a></li>
<li><a href="bypass">Bypass</a></li>
<li><a href="explanation">Explanation</a></li>
</ul>
</header>
</div>
<div class="sidebar">
<ul>
<li><a href="#" class="selected" data-container-id="Overview">Overview</a></li>
<li><a href="#" data-container-id="EULAItself">What the EULA states</a></li>
<li><a href="#" data-container-id="Analyzation">Analysis</a></li>
<li><a href="#" data-container-id="Review">Review of Models</a></li>
<li><a href="#" data-container-id="Effects">Effects</a></li>
<li><a href="#" data-container-id="Conclusion">Conclusion</a></li>
<li><a href="#" data-container-id="Technical">Technical Explanation</a></li>
</ul>
</div>
<div class="content">
<div class="InTheContent" id="Overview" style="display:block;">
<h1>The EULA</h1>
<hr>
<p>The Minecraft EULA was a policy implemented in the summer of 2014. It limited the way Minecraft servers could operate. The biggest change was what servers could sell. Previously, such rules on what servers could and could not sell did not exist. For about a year this EULA was not enforced against servers. Starting in May of 2016 servers would be blacklisted for not complying with the EULA - meaning players could not join the server and would be given a fake error: <span class="pre">java.net.SocketException: Network is unreachable</span>. This blacklist went through the Minecraft netty so that the only way for players to join would be to use a modified client or to downgrade to 1.6.</p>
<h1>Average cost of running a Minecraft server</h1>
<hr>
<p>Costs of maintaining a Minecraft server vary greatly. Everything depends on the server and its demands. Smaller servers are usaully shared hosting which is cheaper than dedicated hosting or virtual private servers which larger servers use. Depending on the CPU and hard drive specifications that the server needs, the price fluctuates greatly. Even calculating the amount of RAM needed has its problems as 10 players standing in one chunk will take far less RAM than 10 players spread out over an entire world.
<br><br>
A good equation is <span class="pre">M + N*p</span> where <span class="pre">M</span> is the base cost, <span class="pre">N</span> is the number of players, and <span class="pre">p</span> is the average amount of memory each player needs. Most sources say a good point for <span class="pre">p</span> is 75 MB. The cost will again fluctuate wildly. The cost per GB of RAM on MCProHosting is $10 USD and will be used as the average.
<br><br>
Keep in mind large servers like Hypixel won't follow this equation. The equation stated here is for the raw cost of RAM which is largely what providers charge by. Large servers like Hypixel have build costs, development costs, and many others.
<p class="quote">Large server networks are incredibly expensive to run and are very time consuming. Most large networks run hundreds of Minecraft servers, along with enterprise DDOS protection, databases, dedicated proxies, and web infrastructure. In addition to that, many employ full time staff to manage the hundreds of hours of labor required for server maintenance and plugin development.<br><br>-Matt Sundberg, Owner of Shotbow Network</p>
</p>
</div>
<div class="InTheContent" id="EULAItself">
<h1>What the EULA states</h1>
<hr>
<p>The Minecraft EULA has several parts to it and only one of those parts applies to servers. These are the guidelines for server taken directly:</p>
<ul class="quote">
Therefore, if you comply with and follow the Brand and Asset Usage Guidelines and Naming Guidelines above YOU MAY:
<li>Charge for access to your server, including a server which hosts your Mods, BUT only if:</li>
<ul>
<li>you make a single charge per person that is the same for everyone;</li>
<li>you give everyone you charge, access to all the Mods that you choose to have on your server (except only in respect of genuine admin tools / admin Mods which should be reserved to administrators);</li>
<li>you only give access to your server to users who have a genuine paid for version of Minecraft;</li>
<li>you own or control the server and continue to do so for the whole time that you charge for access to it - so, if you sell the actual servers or server space with Mods pre-installed on them, you must ensure that the person buying the server is aware that she must follow these rules. Essentially you can't get round the rules above by setting up servers with Mods on and then selling those set-ups; and</li>
<li>overall your access charges should be targeted to cover your operational costs of running the server.</li>
</ul>
<li>ask for donations (as opposed to direct charges) IF you do not offer the individual donor something in exchange that only he or she can use. You may offer server wide rewards if donation goals are achieved though.</li>
<li>sell cosmetic items, except for "Capes", IF the item sold does not give a user an unfair gameplay advantage over anyone else on the server - i.e there can be no "pay to win".</li>
<li>sell positive effects or enhancements (other than "Capes") IF everyone on the server is positively affected in exactly the same way.</li>
<li>provide in-game advertising opportunities, sponsorships, or product placement for 3rd parties IF they don't degrade or interfere with gameplay or give a user an unfair gameplay advantage over anyone else on the server.</li>
<li>use in-game currencies IF (i) they are "soft currencies" i.e. a currency earned or expended only through gameplay that has no real world value and that cannot be cashed out, used or transferred across free or paid servers, or converted into "credits"; and (ii) you don't give the impression that it comes from or is associated with Mojang.</li></ul>
<p>The full guidelines are available to read <a href="https://account.mojang.com/terms#commercial">here</a>.</p>
</div>
<div class="InTheContent" id="Analyzation">
<h1>Analysis</h1>
<hr>
<p>Analyzing the guidelines comes down to three points:</p>
<ul>
<li>Servers may only sell enhancements only if it affects everyone (Server-wide boosters)</li>
<li>If servers are selling direct to the player the perks may only be cosmetic (Nametags, particles, etc.)</li>
<li>Servers may advertise to get revenue. (Adventurize, AdBolt).</li>
<li>Servers may make users pay for server entry but only if it is a single charge for all users.</li>
<li>In-game currencies may be used as long as they cannot be purchased or cashed out for real world money.</li>
</ul>
<p>This leaves 4 revenue models that are allowed by the EULA. Servers can:</p>
<ul>
<li>Sell server-wide boosters that affect everyone</li>
<li>Sell cosmetic perks that do not affect gameplay</li>
<li>Have in-game advertising</li>
<li>Have access charges</li>
</ul>
<h2>Server wide boosters</h2>
<hr>
<p>Server wide boosters are when a server has a donation goal. Once this donation goal is reached, everyone on the server recieves that perk either permanently or temporarily. It has to be equal for all players across the server.
<br><br>
Server wide boosters are a good idea but they only seem to work on smaller servers. This system also relies on good samartians to donate to the server. Big servers with 100+ players will have to rely on good samartians to reach the donation goal.</p>
<h2>Cosmetic perks</h2>
<hr>
<p>Cosmetic perks are perks that do not affect gameplay at all and give no advantages at all. Cosmetic perks are what big minigames servers like Hypixel and HiveMC are doing. Special particles and colored nametags are what these servers are mainly selling. This revenue model may prove quite good for large minigames servers. Servers that don't have ongoing gameplay but instead small short lived minigames with limited amounts of players. On minigames servers, items, armor, etc. don't transfer between games. Particles and cosmetics do.
<br><br>
This system is good for minigames servers, but not as well for other gametypes. On Survival, Factions, and Prison servers. On these types of servers, gameplay is much more long-term. Cosmetics don't make as much of a profound effect here. Cosmetics aren't as appealing as on a minigames server. Age demographics on servers may also contribute to this. Younger ages who play on minigames servers may be excited about showing off their new particles. Older ages who play on Factions, Prison, or Survival gametypes may simply not care as much about cosmetics.</p>
<h2>In-game advertising</h2>
<hr>
<p>In-game advertising seems to lack in the revenue aspect. One of the most prominent advertisers is <a href="http://adbolt.net/">AdBolt</a>. AdBolt pays based on impressions - the amount of players who see an advertisement and seems to pay about $1 USD per 1000 impressions. AdBolt's <a href="https://adbolt.net/faq.php">FAQ</a> states that if a server has 20 players in an hour, 400 impressions are made. 400 divided by 20 equals 20. This means that 20 advertisements an hour must come to gain those impressions or about 1 advertisment every 3 minutes. Then again it would take 2.5 hours to make $1. Taking the formula <span class="pre">M + N*p</span> mentioned before and plugging in the numbers is <span class="pre">0+20*75=1500 MB</span>. 1500 MB to GB is 1.5 GB.
<br><br>
Taking the MCProHosting prices also mentioned before yields a total of $15/month. Not all hours of the day will the server encounter these amount of players but it is actually a great model that may be sustainable. The current status of AdBolt is unknown, however. It is also unknown what kinds of ads AdBolt displays as server owners can easily sign up and advertise their own servers on others via AdBolt.
<br><br>
Looking at the other ad provider, <a href="https://www.adventurize.com/">Adventurize</a> tells a slightly different story. Adventurize promises never to advertise other servers, however revenue is based upon clickthrough rates. Text-based advertisements may not have a very good clickthrough rate and without a large player base it may be nearly impossible to pay the server bills with Adventurize.</p>
<h2>Access Charges</h2>
<hr>
<p>The 4th and final revenue model sactioned by the EULA is charging for server access. This model would most likely be the most unsuccessful. There doesn't seem to be very many servers that actually charge for access. A large advertising budget would be needed to get players to pay money to get into a server they haven't seen much of. Servers that do this will be competing with larger, free ones.</p>
<h2>Pure Donations</h2>
<hr>
<p>Why don't servers simply run off of pure donations instead of selling items? The people who play Minecraft are fairly young in age. Items and perks are more appealing to this demographic. Minecraft servers are also businesses not charities; due to this people may not feel the same emotions when donating to a charity. Servers have large operating costs and the good samartians that donate may not be enough to keep the server giving fresh content. If Minecraft servers didn't make any profit, large servers like HiveMC, Hypixel, and Mineplex may not exist at all.</p>
</div>
<div class="InTheContent" id="Review">
<h1>Review of Revenue Models</h1>
<hr>
<p>The summarized points of each EULA sanctioned revenue model.</p>
<p><strong>Server wide boosters</strong>:</p>
<ul>
<li>Works better on smaller servers</li>
<li>Rely on good samartians</li>
<li>May not be enough to pay operating costs</li>
<li>May not do as well on bigger servers</li>
</ul>
<p><strong>Cosmetic perks</strong>:</p>
<ul>
<li>Great for minigames servers</li>
<li>Appeals to younger audience</li>
<li>Unknown if appealing in other gametypes</li>
</ul>
<p><strong>AdBolt</strong>:</p>
<ul>
<li>Can advertise servers</li>
<li>Current status unknown</li>
<li>Pays by impressions</li>
</ul>
<p><strong>Adventurize</strong>:</p>
<ul>
<li>Promises not to advertise servers</li>
<li>Pays by number of clicks</li>
</ul>
<p><strong>Access Charges</strong>:</p>
<ul>
<li>Has to compete against free servers</li>
<li>Hopes players donate based on features alone without seeing server</li>
</ul>
<p><strong>Pure Donations</strong>:</p>
<ul>
<li>Rely on good samartians</li>
<li>May not be enough</li>
<li>Servers are businesses not charities and that my not be appealing</li>
</ul>
<p>The best solution here would be AdBolt. AdBolt might be able to just pay hosting costs. It is unknown if AdBolt is still functioning and if they advertise servers or not. Obviously, AdBolt would not be the best solution for a big server as there are other costs besides hosting.
<br><br>
If a server isn't a minigames server and isn't particularly big the only solution may be to not follow the EULA at all.</p>
</div>
<div class="InTheContent" id="Effects">
<h1>Effects on Servers</h1>
<hr>
<p>Some of the most drastic effects of the EULA have been on servers. Now that the blacklist is in effect large servers that do not follow the EULA have been effectively forced to follow the EULA or lose all of their player base and subsequently their profit.
<br><br>
The enforcement of EULA was organized incredibly poorly. First, Mojang isn't communicating directly with the community except for 2 short posts on the EULA back in 2014. Any changes to the EULA are emailed directly to server owners. In fact, Mojang has never publicly stated anything about the blacklist. Most of what the community knows is based upon the emails from Mojang server owners have released.
<br><br>
For example, Mojang changed their opinions on vote rewards. Originally they were allowed. Then Mojang emailed server owners stating they weren't allowed due to the fact that players were "paying with time." Mojang agained changed their policies re-allowing vote rewards.</p>
<img src="assets/voteemail.png">
</div>
<div class="InTheContent" id="Conclusion">
<h1>Conclusion</h1>
<hr>
<p>Minecraft servers add so much more content to the game. It's hard to think about Minecraft without the servers. The goals of the EULA may have been to make a more positive enviroment and take some of the blame about servers off of Mojang, but a one size fits all solution just doesn't seem to work. Mojang needs to start communicating with the community about any EULA changes made and about the blacklist.</p>
<p class="quote">We have millions of players hitting our servers every single month to play our custom games. I’d have thought that Mojang could see the same value in our custom games as they see in the YouTubers who are adding content to the gameplay experience and being able to do that full time through a proper revenue model. Especially as much of their content focuses on our custom gamemodes, mods, etc., most of which could only be created with the time and resources our models provide.<br><br>-Sterling, Director of Mineplex, from his <a href="http://sterlingplays.com/">open letter</a>.</p>
<h2>Footnote: Age Demographics</h2>
<p>Several items about age demographics are mentioned here. Age demographics in Minecraft are hard to fully know. For example, a survey was done on Hypixel but it was posted to the forums. There is an average of about ~30K players on at any given point however there is only ~900,000 members on the Hypixel forums. Dividing these statistics would yield a statistic of 30% of Hypixel players are registered on the forums but that isn't a valid measure either. 30K is the amount of players on at a given time and the ~900,000 users doesn't count users who didn't see the post or are aren't active. Age demographics in Minecraft are hard to get. The survey data that was found from the survey on Hypixel on age demographics would be incorrect anyways because younger children would most likely not be on the forums or be less likely to fill out the survey.</p>
<h2>Footnote: Bypassing the Blacklist</h2>
<p>A modified client by the name of SquidHQ bypasses the blacklist. There is also a way for server owners to bypass the blacklist using SRV records. See the <a href="bypass">bypass page</a> for more information.
</p>
</div>
<div class="InTheContent" id="Technical">
<h1>Technical Explanation</h1>
<hr>
<p>The blacklist uses a fake version of the netty library in addition to the current netty library. This netty library contains functions that download the blacklist and check a server's IP address against it.</p>
<h2>Versions 1.7-1.11</h2>
<hr>
<p>In versions 1.7-1.11 the fake netty library is located at <span class="pre">.minecraft/libraries/com/mojang/netty/1.6/netty-1.6.jar</span>.</p>
<h2>Versions 1.12 and above</h2>
<hr>
<p>Starting with version 1.12 it seems Mojang has moved their fake netty library. It seems now to exist at <span class="pre">.minecraft/libraries/com/mojang/patchy/1.1/patchy-1.1.jar</span>. Inside patchy, blacklist code is located at the <span class="pre">io/netty/bootstrap/Bootstrap.class</span>. The other classes within patchy are important and the only blacklist code is inside Bootstrap.class</p>
<h1>Solution</h1>
<hr>
<p>The Minecraft client checks SHA hashes of any library file and if it has been modified then Minecraft will redownload it. The only solution is to modify the Minecraft client or attach a Java agent. SquidHQ is a modified launcher and more information about it is located on the <a href="bypass">bypass page</a>.</p> <p>Java agents attach themselves to the Java process and can modify classes when they are loaded. Java agents are a good solution because no matter where Mojang moves the blacklist netty code to, the blacklist agent will be able to stop it. Many Java agents detect if the class name equals io.netty.boostrap and if it is, it sets the <span class="pre">isBlockedServer()</span> method to <span class="pre">return false;</span>. A Java agent that does this can be found <a href="https://github.com/half-cambodian-hacker-man/MojangBlacklistBypass">here.</a></p>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script type='text/javascript'>
var exampleNav = $('.sidebar')
if (exampleNav.length){
exampleNav.on('click', 'a', function(event){
event.preventDefault()
exampleNav.find('a').removeClass('selected')
$('.InTheContent').hide()
$('#' + $(this).attr('data-container-id')).show()
$(this).addClass('selected')
})
}
</script>
<noscript>
<style type="text/css">
.InTheContent
{
display: block;
}
.sidebar {
display: none;
}
</style>
</noscript>
<div class="container">
<div class="footer">
<center><p>This site is not affiliated with Minecraft or Mojang AB</p></center>
</div>
</div>
</body>
</html>