Rediscover classic Minecraft mechanics and recipes from Alpha, Beta, and Release 1.0 eras on your modern server.
LegacyCraft brings the nostalgia of Minecraft’s early days back to modern servers! Experience classic, lost, or forgotten mechanics, recipes, and game systems from past Minecraft versions – from the Alpha age to Release 1.7.
This plugin is a homage to Minecraft’s roots, when every block had meaning and each mechanic had to be discovered. Perfect for survival servers seeking to evoke nostalgia, roleplay servers with historical themes, or content creators planning unique challenges.
Command Description
/legacycraft Shows plugin information
/legacycraft help Displays help menu
/legacycraft epoch Changes your current epoch
/legacycraft epoch list Shows available epochs
/legacycraft bench Opens a legacy workbench
/legacycraft reload Reloads plugin configuration (admin only)
The plugin is fully configurable via the config.yml file:
# Enable/disable the epoch system
epochSystem:
enabled: true
# Available epochs
epochs:
alpha:
description: "Alpha Era – the beginning of Minecraft (pre-Beta)"
beta:
description: "Beta Era – before the official release"
# more epochs...
# Legacy Mechanics
legacyMechanics:
doorBreaking:
enabled: true
chance: 15 # Percentage chance a zombie will try to break a door
time: 60 # Ticks required to break a door (20 ticks = 1 second)
# more mechanics...
As a player, you can:
legacycraft.use Allows use of basic LegacyCraft commands
legacycraft.admin Allows use of admin-level LegacyCraft commands
LegacyCraft offers an easy-to-use API for integration with other plugins:
LegacyCraft api = (LegacyCraft) Bukkit.getPluginManager().getPlugin("LegacyCraft");
String playerEpoch = api.getPlayerEpoch(player);
LegacyCraft was born from a deep love for Minecraft’s history. As longtime players, we’ve witnessed the game’s evolution from its Alpha beginnings to the present day – and now we want to share that journey with the community.
This documentation describes the public API of the LegacyCraft plugin, which can be used by other plugins.
The LegacyCraft plugin provides an API that allows other plugins to:
To access the LegacyCraft API, you must first obtain a reference to the plugin:
LegacyCraft api = (LegacyCraft) Bukkit.getPluginManager().getPlugin("LegacyCraft");
Make sure to declare LegacyCraft as a dependency in your plugin.yml:
depend: [LegacyCraft]
# OR
softdepend: [LegacyCraft]
Here is a simple example of how you might use the LegacyCraft API in your plugin:
public class MyPlugin extends JavaPlugin {
private LegacyCraft legacyCraftAPI;
@Override
public void onEnable() {
// Check if LegacyCraft is available
Plugin plugin = Bukkit.getPluginManager().getPlugin("LegacyCraft");
if (plugin instanceof LegacyCraft) {
legacyCraftAPI = (LegacyCraft) plugin;
getLogger().info("LegacyCraft API successfully hooked!");
} else {
getLogger().warning("LegacyCraft not found!");
}
// Register commands and events
getCommand("mycommand").setExecutor(new MyCommand(this));
getServer().getPluginManager().registerEvents(new MyListener(this), this);
}
public LegacyCraft getLegacyCraftAPI() {
return legacyCraftAPI;
}
}
/**
* Returns the current epoch of a player
* @param player The player
* @return The current epoch or "modern" if none is set
*/
public String getPlayerEpoch(Player player) {
return playerEpochs.getOrDefault(player.getUniqueId(), "modern");
}
/**
* Sets a player's epoch
* @param player The player
* @param epoch The epoch to set
* @return true if the epoch was set successfully
*/
public boolean setPlayerEpoch(Player player, String epoch) {
if (epoch.equals("modern") || availableEpochs.contains(epoch)) {
playerEpochs.put(player.getUniqueId(), epoch);
return true;
}
return false;
}
/**
* Returns all available epochs
* @return A list of all available epochs
*/
public List<String> getAvailableEpochs() {
return new ArrayList<>(availableEpochs);
}
/**
* Checks whether a material is from a newer version than the specified epoch
* @param material The material to check
* @param epoch The epoch
* @return true if the material is not available in the specified epoch
*/
public boolean isItemFromNewerVersion(Material material, String epoch) {
// Implementation within the plugin
}
/**
* Opens a legacy workbench for a player
* @param player The player
* @param benchType The type of workbench (alpha, beta, release)
* @return true if the workbench was opened successfully
*/
public boolean openLegacyWorkbench(Player player, String benchType) {
if (legacyWorkbenches.containsKey(benchType)) {
player.openInventory(legacyWorkbenches.get(benchType));
return true;
}
return false;
}
/**
* Returns all available legacy workbench types
* @return A set of all available workbench types
*/
public Set<String> getAvailableWorkbenches() {
return legacyWorkbenches.keySet();
}
LegacyCraft provides custom events that other plugins can listen to:
LegacyEpochChangeEventTriggered when a player changes their epoch.
public class LegacyEpochChangeEvent extends PlayerEvent implements Cancellable {
private final String oldEpoch;
private String newEpoch;
private boolean cancelled;
// Constructor and getter/setter
}
Usage Example:
@EventHandler
public void onEpochChange(LegacyEpochChangeEvent event) {
Player player = event.getPlayer();
String oldEpoch = event.getOldEpoch();
String newEpoch = event.getNewEpoch();
player.sendMessage("You are switching from " + oldEpoch + " to " + newEpoch + "!");
// Cancel the event if the player is not allowed to switch
if (newEpoch.equals("alpha") && !player.hasPermission("myserver.epoch.alpha")) {
event.setCancelled(true);
player.sendMessage("You do not have permission to enter the Alpha epoch!");
}
}
LegacyWorkbenchOpenEventTriggered when a player opens a legacy workbench.
public class LegacyWorkbenchOpenEvent extends PlayerEvent implements Cancellable {
private final String benchType;
private boolean cancelled;
// Constructor and getter/setter
}
/**
* Returns a ConfigurationSection for a specific epoch
* @param epoch The epoch
* @return ConfigurationSection for the epoch or null if not found
*/
public ConfigurationSection getEpochConfig(String epoch) {
return getConfig().getConfigurationSection("epochSystem.epochs." + epoch);
}
softdepend instead of depend if your plugin should work without LegacyCraft.@EventHandler
public void onEpochChange(LegacyEpochChangeEvent event) {
Player player = event.getPlayer();
String newEpoch = event.getNewEpoch();
// Adjust currency according to epoch
if (newEpoch.equals("alpha")) {
switchCurrency(player, Currency.GOLD_NUGGET);
} else if (newEpoch.equals("beta")) {
switchCurrency(player, Currency.GOLD_INGOT);
} else {
switchCurrency(player, Currency.EMERALD);
}
}
@EventHandler
public void onLegacyWorkbenchOpen(LegacyWorkbenchOpenEvent event) {
Player player = event.getPlayer();
String benchType = event.getBenchType();
// Update quest progress
if (benchType.equals("alpha")) {
questManager.progressQuest(player, "discover_alpha_crafting");
}
}
If you have any questions about the API or need help integrating it into your plugin, feel free to contact us: