Сборник ссылок MCPC+, Cauldron, KCauldron, Thermos [Forge & Bukkit] [1.4.7-1.7.10]

  • Автор темы Автор темы DragonX
  • Дата начала Дата начала
MCPC+, Cauldron, KCauldron, Thermos | Spigot
​
С недавнего времени застыл и KCauldron. Обновления перестали выходить. Сейчас свежей имплементацией сервера с плагинами и модами является Thermos. Сборки ядер можно скачивать отсюда.

Запускатор к нему нужно создавать с такой похожей командой:
Код:
java -XX:+UseG1GC -XX:+UseFastAccessorMethods -XX:+OptimizeStringConcat -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=2048m  -XX:+AggressiveOpts -XX:MaxGCPauseMillis=10 -XX:+UseStringDeduplication -Xms4G -Xmx6G -XX:hashCode=5 -Dfile.encoding=UTF-8 -jar Thermos-1.7.10-<версия>.jar --log-strip-color

Привет, странник! Ты попал на просторы сайта RuBukkit - самого большого из всех других сайтов о серверах Minecraft - CraftBukkit.
Первым делом ты задашься вопросом (а рядовой юзер майна естественно задаст этот вопрос):
как мине зделить ултра сюпер сборку серва с плугинами и мадами??
Что в переводе означает:
Как мне сделать сборку сервера с плагинами и модами?
Ну ни для кого уже не новизна, что плагины Bukkit поддерживает всегда, только с нерекомендованными не дружит.
А вот модификации (или моды), обычный CraftBukkit точно не поддерживает.
Однажды появилось ядро, способное запускать на сервере и плагины, и моды, но не просто обычные моды, а портированные, что в корне осложняло дело.
Это ядро звалось MCPC. Оно служило нам верой и правдой до версии 1.4.6.
Но недавно (а может и давно, я не знаю 😁) разработчики этого обычного ядра MCPC сделали новое, ультимативное ядро под названием MCPC-Plus (коротко MCPC+), внутри которого уже включён Forge ModLoader, поддержка плагинов для Bukkit, и оптимизация Spigot.
Другими словами - всё, что нужно для создания сервера, уже включено, так сказать.

У многих неопытных возникнут вопросы:
Как его создать? Как его запустить? Как добавить моды?
Отвечу: всё делаем точно также, как и с обычным сервером.
Всё абсолютно точно также!

Можете даже оставить тот сервер, настроенный, с плагинами, но просто сменить старое ядро на Cauldron и запускать!
Появятся новые папки: config, mods и libraries.
Возможно даже появится папка cache, но она не так важна, как эти:
config: конфигурации модов (*.cfg, *.conf). Меняются также, как и в клиенте.
Для простоты и стабильности советую после настройки конфигураций модов на сервере скопировать config в папку вашего клиента.
mods: моды для сервера.
Подходят абсолютно любые моды клиента! Портированные моды не нужны!
libraries: различные библиотеки, идентична папке libraries внутри папки .minecraft клиента игры.

Начиная с версии 1.7.2, серверная часть стала называться Cauldron. Особенных изменений в серверной части не произошло, но теперь она будет называться именно вот так.

Когда появилась версия 1.8 и пошли удаления собранных модификаций сервера, Cauldron тоже попал под раздачу. Раньше выпускались патчи, а сейчас разработчик ушёл и начал работать в команде Sponge. Поэтому теперь есть только неофициальные сборки.
Сайт Yive's Mirror предлагает сборки под названием KCauldron, которые включают в себя большинство невошедших фиксов и обновления Forge.

Thermos тоже накрылся. Нормальной свежей связки Forge+Bukkit теперь опять нет.

Thermos 1.7.10 #58 - Изменения релиза
Библиотеки - Скачать, Зеркало
Forge 1614 - Скачать, Зеркало
Forge 1558 - Скачать, Зеркало

KCauldron 1.7.10

Какие-то фиксы с сайта Yive's Mirror


Cauldron - Библиотеки
1.6.4 Forge 965 #01.205 - Скачать
1.7.2 Forge 1147 #04.196 - Скачать
1.7.10 Forge 1240 #06.213 - Скачать
1.7.10 Forge 1403 #1.54 Неофициальное - Скачать


MCPC+ (ТОЛЬКО Java 7) - Библиотеки
1.6.4 R2.1 Forge 965 #251 - Скачать
1.5.2 R1.1 Forge 738 #653 - Скачать
1.4.7 R1.1 Forge 534 #248 - Скачать


Изменение ссылки авторизации:
1.6.4
1.7.*

Универсальный способ
 
Последнее редактирование:
YggdrasilMinecraftSessionService.class
И куда тут вписывать?!

package com.mojang.authlib.yggdrasil;

import com.google.common.collect.Iterables;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonParseException;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.HttpAuthenticationService;
import com.mojang.authlib.exceptions.AuthenticationException;
import com.mojang.authlib.exceptions.AuthenticationUnavailableException;
import com.mojang.authlib.minecraft.HttpMinecraftSessionService;
import com.mojang.authlib.minecraft.InsecureTextureException;
import com.mojang.authlib.minecraft.MinecraftProfileTexture;
import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type;
import com.mojang.authlib.properties.Property;
import com.mojang.authlib.properties.PropertyMap;
import com.mojang.authlib.yggdrasil.request.JoinMinecraftServerRequest;
import com.mojang.authlib.yggdrasil.response.HasJoinedMinecraftServerResponse;
import com.mojang.authlib.yggdrasil.response.MinecraftProfilePropertiesResponse;
import com.mojang.authlib.yggdrasil.response.MinecraftTexturesPayload;
import com.mojang.authlib.yggdrasil.response.Response;
import com.mojang.util.UUIDTypeAdapter;
import java.net.URL;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import org.apache.commons.codec.Charsets;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.IOUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class YggdrasilMinecraftSessionService extends HttpMinecraftSessionService
{
private static final Logger LOGGER = LogManager.getLogger();
private static final String BASE_URL = "https://sessionserver.mojang.com/session/minecraft/";
private static final URL JOIN_URL = HttpAuthenticationService.constantURL("https://sessionserver.mojang.com/session/minecraft/join");
private static final URL CHECK_URL = HttpAuthenticationService.constantURL("https://sessionserver.mojang.com/session/minecraft/hasJoined");
private final PublicKey publicKey;
private final Gson gson = new GsonBuilder().registerTypeAdapter(UUID.class, new UUIDTypeAdapter()).create();

protected YggdrasilMinecraftSessionService(YggdrasilAuthenticationService authenticationService) {
super(authenticationService);
try
{
X509EncodedKeySpec spec = new X509EncodedKeySpec(IOUtils.toByteArray(YggdrasilMinecraftSessionService.class.getResourceAsStream("/yggdrasil_session_pubkey.der")));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
this.publicKey = keyFactory.generatePublic(spec);
} catch (Exception e) {
throw new Error("Missing/invalid yggdrasil public key!");
}
}

public void joinServer(GameProfile profile, String authenticationToken, String serverId) throws AuthenticationException
{
JoinMinecraftServerRequest request = new JoinMinecraftServerRequest();
request.accessToken = authenticationToken;
request.selectedProfile = profile.getId();
request.serverId = serverId;

getAuthenticationService().makeRequest(JOIN_URL, request, Response.class);
}

public GameProfile hasJoinedServer(GameProfile user, String serverId) throws AuthenticationUnavailableException
{
Map arguments = new HashMap();

arguments.put("username", user.getName());
arguments.put("serverId", serverId);

URL url = HttpAuthenticationService.concatenateURL(CHECK_URL, HttpAuthenticationService.buildQuery(arguments));
try
{
HasJoinedMinecraftServerResponse response = (HasJoinedMinecraftServerResponse)getAuthenticationService().makeRequest(url, null, HasJoinedMinecraftServerResponse.class);

if ((response != null) && (response.getId() != null)) {
GameProfile result = new GameProfile(response.getId(), user.getName());

if (response.getProperties() != null) {
result.getProperties().putAll(response.getProperties());
}

return result;
}
return null;
}
catch (AuthenticationUnavailableException e) {
throw e; } catch (AuthenticationException e) {
}
return null;
}

public Map<MinecraftProfileTexture.Type, MinecraftProfileTexture> getTextures(GameProfile profile, boolean requireSecure)
{
Property textureProperty = (Property)Iterables.getFirst(profile.getProperties().get("textures"), null);

if (textureProperty == null) {
return new HashMap();
}

if (requireSecure) {
if (!textureProperty.hasSignature()) {
LOGGER.error("Signature is missing from textures payload");
throw new InsecureTextureException("Signature is missing from textures payload");
}

if (!textureProperty.isSignatureValid(this.publicKey)) {
LOGGER.error("Textures payload has been tampered with (signature invalid)");
throw new InsecureTextureException("Textures payload has been tampered with (signature invalid)");
}
}
MinecraftTexturesPayload result;
try
{
String json = new String(Base64.decodeBase64(textureProperty.getValue()), Charsets.UTF_8);
result = (MinecraftTexturesPayload)this.gson.fromJson(json, MinecraftTexturesPayload.class);
} catch (JsonParseException e) {
LOGGER.error("Could not decode textures payload", e);
return new HashMap();
}

return result.getTextures() == null ? new HashMap() : result.getTextures();
}

public GameProfile fillProfileProperties(GameProfile profile, boolean requireSecure)
{
if (profile.getId() == null) {
return profile;
}
try
{
URL url = HttpAuthenticationService.constantURL(new StringBuilder().append("https://sessionserver.mojang.com/session/minecraft/profile/").append(UUIDTypeAdapter.fromUUID(profile.getId())).toString());
url = HttpAuthenticationService.concatenateURL(url, new StringBuilder().append("unsigned=").append(!requireSecure).toString());
MinecraftProfilePropertiesResponse response = (MinecraftProfilePropertiesResponse)getAuthenticationService().makeRequest(url, null, MinecraftProfilePropertiesResponse.class);

if (response == null) {
LOGGER.debug(new StringBuilder().append("Couldn't fetch profile properties for ").append(profile).append(" as the profile does not exist").toString());
return profile;
}
GameProfile result = new GameProfile(response.getId(), response.getName());
result.getProperties().putAll(response.getProperties());
profile.getProperties().putAll(response.getProperties());
LOGGER.debug(new StringBuilder().append("Successfully fetched profile properties for ").append(profile).toString());
return result;
}
catch (AuthenticationException e) {
LOGGER.warn(new StringBuilder().append("Couldn't look up profile properties for ").append(profile).toString(), e);
}return profile;
}

public YggdrasilAuthenticationService getAuthenticationService()
{
return (YggdrasilAuthenticationService)super.getAuthenticationService();
}
}
 
Проверьте Java. Не удаляйте в папке сервера minecraft_server1xxx.jar.

Java работает, т.к обычный баккит спокойно запускается, джарник сервера тоже на месте.
И куда тут вписывать?!

package com.mojang.authlib.yggdrasil;

import com.google.common.collect.Iterables;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonParseException;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.HttpAuthenticationService;
import com.mojang.authlib.exceptions.Authent...

Если я не ошибаюсь, то как раз сюда:

public class YggdrasilMinecraftSessionService extends HttpMinecraftSessionService
{
private static final Logger LOGGER = LogManager.getLogger();
private static final String BASE_URL = "https://sessionserver.mojang.com/session/minecraft/";
private static final URL JOIN_URL = HttpAuthenticationService.constantURL("https://sessionserver.mojang.com/session/minecraft/join");
private static final URL CHECK_URL = HttpAuthenticationService.constantURL("https://sessionserver.mojang.com/session/minecraft/hasJoined");
private final PublicKey publicKey;
private final Gson gson = new GsonBuilder().registerTypeAdapter(UUID.class, new UUIDTypeAdapter()).create();
 
Java работает, т.к обычный баккит спокойно запускается, джарник сервера тоже на месте.


Если я не ошибаюсь, то как раз сюда:

public class YggdrasilMinecraftSessionService extends HttpMinecraftSessionService
{
private static final Logger LOGGER = LogManager.getLogger();
private static final String BASE_URL = "https://sessionserver.mojang.com/session/minecraft/";
private static final URL JOIN_URL = HttpAuthenticationService.constantURL("https://sessionserver.mojang.com/session/minecraft/join");
private static final URL CHECK_URL = HttpAuthenticationService.constantURL("https://sessionserver.mojang.com/session/minecraft/hasJoined");
private final PublicKey publicKey;
private final Gson gson = new GsonBuilder().registerTypeAdapter(UUID.class, new UUIDTypeAdapter()).create();
А что куда именно вписывать
 
Мне кажется, что в версиях выше 1.7.2 уже нельзя будет делать подмену ссылки. Пока кто-нибудь не сделает копию их новой системы авторизации UUID.
 
Мне кажется, что в версиях выше 1.7.2 уже нельзя будет делать подмену ссылки. Пока кто-нибудь не сделает копию их новой системы авторизации UUID.
Код:
2014-08-14 19:47:25 [SEVERE] ------------------------------
2014-08-14 19:47:25 [SEVERE] Current Thread: Thread-1
2014-08-14 19:47:25 [SEVERE]     PID: 10 | Suspended: false | Native: false | State: RUNNABLE | Blocked Time: -1 | Blocked Count: 43
2014-08-14 19:47:25 [SEVERE]     Stack:
2014-08-14 19:47:25 [SEVERE]         java.lang.Thread.currentThread(Native Method)
2014-08-14 19:47:25 [SEVERE]         java.lang.Thread.interrupted(Thread.java:982)
2014-08-14 19:47:25 [SEVERE]         java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1218)
2014-08-14 19:47:25 [SEVERE]         java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:340)
2014-08-14 19:47:25 [SEVERE]         java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:439)
2014-08-14 19:47:25 [SEVERE]         cpw.mods.fml.relauncher.FMLRelaunchLog$ConsoleLogThread.run(FMLRelaunchLog.java:81)
2014-08-14 19:47:25 [SEVERE]         java.lang.Thread.run(Thread.java:744)
2014-08-14 19:47:25 [SEVERE] ------------------------------
2014-08-14 19:47:25 [SEVERE] Current Thread: Signal Dispatcher
2014-08-14 19:47:25 [SEVERE]     PID: 5 | Suspended: false | Native: false | State: RUNNABLE | Blocked Time: -1 | Blocked Count: 0
2014-08-14 19:47:25 [SEVERE]     Stack:
2014-08-14 19:47:25 [SEVERE] ------------------------------
2014-08-14 19:47:25 [INFO] Startup script './start.sh' does not exist! Stopping server.
2014-08-14 19:47:32 [INFO] Starting minecraft server version 1.6.4
2014-08-14 19:47:32 [INFO] MinecraftForge v
2014-08-14 19:47:32 [INFO] 9.11.1.965
2014-08-14 19:47:32 [INFO]  Initialized

2014-08-14 19:47:32 [INFO] Replaced 111 ore recipies
2014-08-14 19:47:37 [INFO] Loading properties
2014-08-14 19:47:37 [INFO] Default game type: SURVIVAL
2014-08-14 19:47:37 [INFO] This server is running Cauldron-MCPC-Plus version git-Cauldron-MCPC-Plus1.6.4-1.965.21.0 (MC: 1.6.4) (Implementing API version 1.6.4-R2.1-SNAPSHOT)
2014-08-14 19:47:37 [INFO] Generating keypair
2014-08-14 19:47:37 [INFO] Starting Minecraft server on *:25565
2014-08-14 19:47:37 [WARNING] **** FAILED TO BIND TO PORT!
2014-08-14 19:47:37 [WARNING] The exception was: {0}
2014-08-14 19:47:37 [WARNING] Perhaps a server is already running on that port?
Сервер вырубается постоянно, иногда вообще не запускается, иногда работает и через какое-то время вырубается. В чем проблема?
 
Код:
2014-08-14 19:47:25 [SEVERE] ------------------------------
2014-08-14 19:47:25 [SEVERE] Current Thread: Thread-1
2014-08-14 19:47:25 [SEVERE]     PID: 10 | Suspended: false | Native: false | State: RUNNABLE | Blocked Time: -1 | Blocked Count: 43
2014-08-14 19:47:25 [SEVERE]     Stack:
2014-08-14 19:47:25 [SEVERE]         java.lang.Thread.currentThread(Native Method)
2014-08-14 19:47:25 [SEVERE]         java.lang.Thread.interrupted(Thread.java:982)
2014-08-14 19:47:25 [SEVERE]         java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1218)
2014-08-14 19:47:25 [SEVERE]         java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:340)
2014-08-14 19:47:25 [SEVERE]         java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:439)
2014-08-14 19:47:25 [SEVERE]         cpw.mods.fml.relauncher.FMLRelaunchLog$ConsoleLogThread.run(FMLRelaunchLog.java:81)
2014-08-14 19:47:25 [SEVERE]         java.lang.Thread.run(Thread.java:744)
2014-08-14 19:47:25 [SEVERE] ------------------------------
2014-08-14 19:47:25 [SEVERE] Current Thread: Signal Dispatcher
2014-08-14 19:47:25 [SEVERE]     PID: 5 | Suspended: false | Native: false | State: RUNNABLE | Blocked Time: -1 | Blocked Count: 0
2014-08-14 19:47:25 [SEVERE]     Stack:
2014-08-14 19:47:25 [SEVERE] ------------------------------
2014-08-14 19:47:25 [INFO] Startup script './start.sh' does not exist! Stopping server.
2014-08-14 19:47:32 [INFO] Starting minecraft server version 1.6.4
2014-08-14 19:47:32 [INFO] MinecraftForge v
2014-08-14 19:47:32 [INFO] 9.11.1.965
2014-08-14 19:47:32 [INFO]  Initialized

2014-08-14 19:47:32 [INFO] Replaced 111 ore recipies
2014-08-14 19:47:37 [INFO] Loading properties
2014-08-14 19:47:37 [INFO] Default game type: SURVIVAL
2014-08-14 19:47:37 [INFO] This server is running Cauldron-MCPC-Plus version git-Cauldron-MCPC-Plus1.6.4-1.965.21.0 (MC: 1.6.4) (Implementing API version 1.6.4-R2.1-SNAPSHOT)
2014-08-14 19:47:37 [INFO] Generating keypair
2014-08-14 19:47:37 [INFO] Starting Minecraft server on *:25565
2014-08-14 19:47:37 [WARNING] **** FAILED TO BIND TO PORT!
2014-08-14 19:47:37 [WARNING] The exception was: {0}
2014-08-14 19:47:37 [WARNING] Perhaps a server is already running on that port?
Сервер вырубается постоянно, иногда вообще не запускается, иногда работает и через какое-то время вырубается. В чем проблема?
Я похож на разработчика Cauldron?
Вы используете тот билд, на который я дал ссылку, или другой?
 
Код:
2014-08-14 19:47:25 [SEVERE] ------------------------------
2014-08-14 19:47:25 [SEVERE] Current Thread: Thread-1
2014-08-14 19:47:25 [SEVERE]     PID: 10 | Suspended: false | Native: false | State: RUNNABLE | Blocked Time: -1 | Blocked Count: 43
2014-08-14 19:47:25 [SEVERE]     Stack:
2014-08-14 19:47:25 [SEVERE]         java.lang.Thread.currentThread(Native Method)
2014-08-14 19:47:25 [SEVERE]         java.lang.Thread.interrupted(Thread.java:982)
2014-08-14 19:47:25 [SEVERE]         java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1218)
2014-08-14 19:47:25 [SEVERE]         java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:340)
2014-08-14 19:47:25 [SEVERE]         java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:439)
2014-08-14 19:47:25 [SEVERE]         cpw.mods.fml.relauncher.FMLRelaunchLog$ConsoleLogThread.run(FMLRelaunchLog.java:81)
2014-08-14 19:47:25 [SEVERE]         java.lang.Thread.run(Thread.java:744)
2014-08-14 19:47:25 [SEVERE] ------------------------------
2014-08-14 19:47:25 [SEVERE] Current Thread: Signal Dispatcher
2014-08-14 19:47:25 [SEVERE]     PID: 5 | Suspended: false | Native: false | State: RUNNABLE | Blocked Time: -1 | Blocked Count: 0
2014-08-14 19:47:25 [SEVERE]     Stack:
2014-08-14 19:47:25 [SEVERE] ------------------------------
2014-08-14 19:47:25 [INFO] Startup script './start.sh' does not exist! Stopping server.
2014-08-14 19:47:32 [INFO] Starting minecraft server version 1.6.4
2014-08-14 19:47:32 [INFO] MinecraftForge v
2014-08-14 19:47:32 [INFO] 9.11.1.965
2014-08-14 19:47:32 [INFO]  Initialized

2014-08-14 19:47:32 [INFO] Replaced 111 ore recipies
2014-08-14 19:47:37 [INFO] Loading properties
2014-08-14 19:47:37 [INFO] Default game type: SURVIVAL
2014-08-14 19:47:37 [INFO] This server is running Cauldron-MCPC-Plus version git-Cauldron-MCPC-Plus1.6.4-1.965.21.0 (MC: 1.6.4) (Implementing API version 1.6.4-R2.1-SNAPSHOT)
2014-08-14 19:47:37 [INFO] Generating keypair
2014-08-14 19:47:37 [INFO] Starting Minecraft server on *:25565
2014-08-14 19:47:37 [WARNING] **** FAILED TO BIND TO PORT!
2014-08-14 19:47:37 [WARNING] The exception was: {0}
2014-08-14 19:47:37 [WARNING] Perhaps a server is already running on that port?
Сервер вырубается постоянно, иногда вообще не запускается, иногда работает и через какое-то время вырубается. В чем проблема?
2014-08-14 19:47:37 [WARNING] **** FAILED TO BIND TO PORT!
Ни о чём не говорит?
 
😆
 
Последнее редактирование:
Очень благодарен за способ, но на последней стадии у меня ошибка.Посмотреть вложение 24604

JAVA_HOME вроде как указал.

jdk 1.8.0_05

Похожую шляпу поймал.
Я не знаю, что точно мне помогло. Думаю, свежая ява и права админа.
Что делал, чтобы исправить:
- удалил все java
- удалил к черту полученную папку cauldron
- поставил новую jdk 1.7
- отредактировал JAVA_HOME
- перезагрузился
- запустил Git bash с правами локального админа
- повторил всё, как уважаемый crimento завещал, но без правок(простой тест сборки)
- после всех темных делишек получил
Код:
BUILD SUCCESSFUL

Total time: 9 mins 45.508 secs

- затем выполнил нужные изменения и успешно повторил сборку

Пы.Сы. Собирал cauldron-1.6.4-1.965.21.0-server
А вообще вручную патчить автоматические патчи - офигенно круто. Почему авторы сорцов не могут вынести ссылки в файл настроек???
 
Назад
Верх Низ