Skip to content

Instantly share code, notes, and snippets.

I realized that some people may be interested in a quick recap of what's happened to all the Java-based server implementations that were announced since the DMCA about 7 months ago. Here goes.

  • CraftBukkit: Totally dead
  • Spigot: Alive and suitable for production, has builds available without Spigot optimizations for those who prefer something more vanilla-like
  • Sponge: Released working alpha for the Forge version yesterday, vanilla-based version still in development
  • Granite: Merged into Sponge as a base for the vanilla version, still in-progress
  • Project Rainbow: Still alive, with small community producing plugins
  • Husk: Total vaporware
protected final Queue<FutureTask<?>> j = new java.util.concurrent.ConcurrentLinkedQueue<FutureTask<?>>() {
// PaperSpigot: Make size() constant-time
private AtomicInteger cachedSize = new AtomicInteger(0);
@Override
public boolean add(FutureTask<?> e) {
boolean result = super.add(e);
if (result) {
cachedSize.incrementAndGet();
}
private static Object minecraftServer;
private static Field recentTps;
public static double[] getRecentTps() {
try {
if (minecraftServer == null) {
Server server = Bukkit.getServer();
Field consoleField = server.getClass().getDeclaredField("console");
consoleField.setAccessible(true);
minecraftServer = consoleField.get(server);
package es.nkmem.da.movefreq.packethooks;
import com.comphenix.packetwrapper.WrapperPlayClientPositionLook;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.ListenerPriority;
import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketEvent;
import es.nkmem.da.movefreq.MoveFreqPlugin;
import lombok.Data;
import lombok.RequiredArgsConstructor;
package net.ess3.nms.refl;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;
import org.bukkit.Bukkit;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import mcserver, time, threading
from bottle import route, run, response, hook
server = mcserver.McServer('play.primemc.org', 25565)
def schedule_update():
threading.Timer(1, schedule_update).start()
threading.Thread(target=lambda: server.Update()).start()
@hook('after_request')
import os, yaml
datadir = 'userdata'
key = 'money'
maxbal = 2500.0
def is_non_zero_file(fpath):
return True if os.path.isfile(fpath) and os.path.getsize(fpath) > 0 else False
for f in os.listdir(datadir):
if str(f).endswith('.yml'):
private static Method getCommandMap;
public static CommandMap getCommandMap(Server server) {
try {
if (getCommandMap == null) {
getCommandMap = server.getClass().getDeclaredMethod("getCommandMap");
getCommandMap.setAccessible(true);
}
return (CommandMap) getCommandMap.invoke(server);
} catch (Exception exception) {
package com.earth2me.essentials.utils;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.Potion;
import org.bukkit.potion.PotionType;
public class PotionMetaUtil {
@SuppressWarnings("deprecation")
public ItemStack createPotionItem(int effectId) throws IllegalArgumentException {
int damageValue = getBit(effectId, 0) +
package com.earth2me.essentials.providers;
import com.earth2me.essentials.IEssentials;
public class ProviderFactory<T extends Provider> {
private IEssentials ess;
private String providerType;
private Iterable<Class <? extends T>> availableProviders;
public ProviderFactory(IEssentials ess, Iterable<Class <? extends T>> availableProviders, String providerType) {