Zurück zu Tessera
Tessera Releases

Änderungen. Version für Version.

Neue Funktionen, technische Änderungen und Fehlerbehebungen für Tessera.

Aktuelle Version 0.1.4
Channel Stable
Veröffentlicht am 26. August 2026
Aktuell Stable

Tessera 0.1.4

Regionssichere Entity-, Redstone- und Game-Event-Verarbeitung

Verbesserte Regionsprüfung für Vanilla-Befehle, Enderdrachen, Redstone und Vibrationen

Minecraft 26.2
Entity-SelektorenRegion-ThreadingEnderdracheRedstoneGame EventsSculk
  • Ausgewählte Entities werden weiterhin ausschließlich auf ihrem zuständigen Region-Thread verändert.
  • Die direkte Auswahl einer geladenen Entity über ihre UUID bleibt unterstützt.
  • Der Schutz vor räumlichen Abfragen über fremde oder mehrere Regionen bleibt erhalten.
  • Die Kollisionsabfragen des Enderdrachens berücksichtigen ausschließlich Entities der aktuell zuständigen Region.
  • Veraltete Multipart-Hitboxen des Enderdrachens am Weltursprung verursachen beim ersten Tick keine Thread-Check-Exception mehr.
  • Eigencraft-Redstone führt keine Blockaktualisierungen mehr außerhalb der aktuell zuständigen Region aus.
  • Game Events und Vibrationen werden nicht mehr direkt an Listener einer fremden Region übergeben.
  • Regionsfremde Redstone- und Game-Event-Aktualisierungen werden sicher übersprungen, anstatt parallele Änderungen an fremden Regionsdaten vorzunehmen.
  • Regressionstests für unbeschränkte Selektoren, direkte UUID-Auswahl und regionsübergreifende Suchbereiche wurden ergänzt.
  • Der Enderdrache wurde in einer laufenden Tessera-Testinstanz erfolgreich über den Vanilla-Typ-Selektor getötet, ohne Thread-Check-Exception oder Stacktrace.
  • Der vollständige Tessera-Build einschließlich Checkstyle und Tests wurde erfolgreich ausgeführt.
Stable

Tessera 0.1.3

Regionssichere Vanilla-Entity-Selektoren

Regionsrouting für Vanilla-Entity-Selektoren aus Serverkonsole und RCON

Minecraft 26.2
TesseraCommandsEntity-SelektorenRegion-Threading

Geändert

  • Vanilla-Befehle mit execute in <dimension> positioned <x> <y> <z> und räumlich begrenzten Entity-Selektoren werden auf der zuständigen Region ausgeführt.
  • Regionsfremde Aufrufe von Level#getEntities werden verhindert.
  • Regionsübergreifende und unbeschränkte Entity-Suchen werden mit einer verständlichen Fehlermeldung abgelehnt.
  • Befehle für ungeladene Zielregionen werden sicher und ohne internen Thread-Check abgelehnt.
  • RCON wartet auf regionsgebundene Befehle, ohne den Global-Region-Thread zu blockieren.
  • Console- und RCON-Regressionstests für Overworld, Nether und End wurden ergänzt.
  • if entity, as, at, data get entity und kill werden durch die neuen Regressionstests abgedeckt.
Stable

Tessera 0.1.2

Locator Bar wurde wieder hinzugefügt

Multi-threading für Locator Bar

Minecraft 26.2
TesseraWaypointsLocatorbar

Geändert

  • Locatorbar wurde hinzugefügt mit einem eigenem Patch.
  • Befehl Command wurde wieder hinzugefügt.
Stable

Tessera 0.1.1

Challenge-Plugin Corrections

Multiple hotfixes

Minecraft 26.2
TesseraAPI ImplementationFixes

Geändert

  • Konsolenbefehle erhalten jetzt zuverlässig einen gültigen Overworld-Kontext.
  • Gepufferte Befehle werden nach dem Serverstart in korrekter Reihenfolge ausgeführt. /stop, Vanilla-, Plugin- und RCON-Befehle funktionieren vor und nach Serverstart.
  • ÌllegalState Exception statt Nullpointer Exception bei ungültigen weltlosen Command-sources (Player/Server?).
  • Neue Runtime-World-API-Methode loadWorldAsync(NamespacedKey).
  • WorldLoadResult und WorldCloneResult liefern jetzt worldKey() und worldPath().
  • Neuer Fehlerstatus IDENTITY_MISMATCH bei Verwechslung von Weltname und World-Key.
  • Plugins müssen für Runtime-Welten World#getKey() statt World#getName() nutzen.
  • Windows-Paperclip-Langpfadtest mit Pfaden bis 251 Zeichen ergänzt.

Beispiel Code für das Benutzen von World#getKey() über die Tessera-API

NamespacedKey key = NamespacedKey.fromString(savedWorldKey);
if (key == null) {
// gespeicherte Identität ist ungültig
return;
}

runtimeWorldManager.loadWorldAsync(key).thenAccept(result -> {
if (!result.successful()) {
// result.status(), result.message() und result.cause() auswerten
return;
}

    World world = result.world();
    NamespacedKey stableKey = result.worldKey();
    Path actualPath = result.worldPath();
});
Stable

Tessera 0.1.0

Hotfix Irongolems

Fix Multi-Thread GlobalRegioNSchedulers

Minecraft 26.2
TesseraHotfix

Geändert

  • Eisengolem hotfix: Eisengolem greifen jetzt Spieler an welche Villager verletzen.
Stable

Tessera 0.0.9

Gamerule forgive_dead_players fixed

Fix Multi-Thread GlobalRegioNSchedulers

Minecraft 26.2
TesseraAPI Implementation

Geändert

  • Paper upstream
  • Eisengolem hotfix: Eisengolem respektieren die gamerule forgive_dead_players
Stable

Tessera 0.0.8

Gamerule forgive_dead_players fixed

Fix Multi-Thread GlobalRegioNSchedulers

Minecraft 26.2
TesseraGamerule HotfixPaper upstream

Geändert

  • Paper upstream
  • Eisengolem hotfix: Eisengolem respektieren die gamerule forgive_dead_players
Stable

Tessera 0.0.7

Ender-perlen wurden wieder auf vanilla verhalten hergestellt.

Fix Multi-Thread GlobalRegioNSchedulers

Minecraft 26.2
TesseraEnderpearlsreVanilla implementation

Geändert

  • Eigene Implementierung für das Vanilla verhalten von enderperlen in regionized multi-threading.
Stable

Tessera 0.0.6

Rework Patch implementation & multi-threading

Fix Multi-Thread GlobalRegioNSchedulers

Minecraft 26.2
TesseraPaper-upstream

Geändert

  • Paper API upstream: moved to chanel stable, tessera follows.
  • GlobalRegionThread has been added to /tick
  • Tick has been enabled.
  • Patch system updated
Beta

Tessera 0.0.5

Beta-version

Erste Test-durchläufe waren alle Erfolgreich

Minecraft 26.2
TesseraFirst beta buildPaper-upstream

Geändert

  • Paper API upstream: moved to chanel beta, tessera follows.

  • Settings geändert, für eigenes versions system.

// tessera 26.2 start - change root name
rootProject.name = "tessera"
// tessera 26.2 end - change root name

// we are using the folia-api, 
//  which is the paper api, 
//  which is the spigot api,
//  which is the bukkit api.
// tessera is a fork, of a fork(folia), of a fork(paper), of a fork(spigot) which is a fork of BUKKIT
include("folia-api")

// also include server.. otherwise you know this whole project is pretty useless
include("folia-server")

gradle.lifecycle.beforeProject {
    val mcVersion = providers.gradleProperty("mcVersion").get().trim()
    // tessera 26.2 start - change build loader
    val tesseraBuildNumber = providers.gradleProperty("tesseraBuildVersion").get()
    val tesseraVersionChannel = providers.gradleProperty("tesseraBuildChannel").get()

    version = "$mcVersion.build.$tesseraBuildNumber-$tesseraVersionChannel"
    // tessera 26.2 end - change build loader
}
Alpha

Tessera 0.0.4

Neue gamerule ALLOW_EYES_OF_ENDER_USE

Erlaubt die Benutzung von Enderaugen, sowie das aktivieren den End-portals

Minecraft 26.2
TesseraGamerules

Hinzugefügt

  • Neue gamerule allow_eyes_of_ender_use

Geändert

  • Static GameRules wurden erweitert (Es gibt insgesamt 3 Einträge für die Gamerules) Der Eintrag befindet sich im GameRules kopf unter ALLOW_ENTERING_NETHER_USING_PORTALS
public class GameRules {
    public static final GameRule<Boolean> ALLOW_ENTERING_NETHER_USING_PORTALS = registerBoolean(
            "allow_entering_nether_using_portals", GameRuleCategory.MISC, true
    );
    // tessera 26.2 start - gamerule for ender_pearl_use
    public static final GameRule<Boolean> ALLOW_EYES_OF_ENDER_USE = registerBoolean(
            "allow_eyes_of_ender_use", GameRuleCategory.MISC, true
    );
    // tessera 26.2 end - gamerule for ender_pearl_use
  • Gamerule wurde in den ‘GameRule’ Registries kopf hinzugefügt
/**
 * GameRules dictate certain behavior within Minecraft itself
 * <br>
 * For more information please visit the
 * <a href="https://minecraft.wiki/w/Commands/gamerule">Minecraft
 * Wiki</a>
 *
 * @param <T> type of rule (Boolean or Integer)
 * @see GameRules
 */
@ApiStatus.NonExtendable
public abstract class GameRule<T> implements net.kyori.adventure.translation.Translatable, FeatureDependant, Keyed {
    // tessera 26.2 start - gamerule for ender_pearl_use
    /**
     * Toggles the ender eye usage in frames and as projectile,
     *  also disables traveling to the end
     *
     * @deprecated renamed to {@link GameRules#ALLOW_EYES_OF_ENDER_USE}
     */
    public static final GameRule<Boolean> ALLOW_EYES_OF_ENDER_USE = GameRules.ALLOW_EYES_OF_ENDER_USE;
    // tessera 26.2 end - gamerule for ender_pearl_use
  • Gamerule wurde in den ‘GameRules’ Registries kopf hinzugefügt <- das sind zwei verschiedene Registries.
/**
 * All the vanilla gamerules
 */
@NullMarked
public final class GameRules {
    // tessera 26.2 start - gamerule for ender_pearl_use
    public static final GameRule<Boolean> ALLOW_EYES_OF_ENDER_USE = getRule("allow_eyes_of_ender_use");
    // tessera 26.2 end - gamerule for ender_pearl_use
  • Die Enderaugen wurden angepasst, sodass sie bei inaktiver gamerule nicht geworfen oder benutzt werden können. Dazu wurden die Methoden useOn und use geändert.
// tessera 26.2 start - gamerule for ender_pearl_use
import net.minecraft.world.level.gamerules.GameRules;
// tessera 26.2 end - gamerule for ender_pearl_use

    @Override
    public InteractionResult useOn(final UseOnContext context) {
        Level level = context.getLevel();
        BlockPos pos = context.getClickedPos();
        BlockState targetState = level.getBlockState(pos);

        // tessera 26.2 start - gamerule for ender_pearl_use
        if(level instanceof ServerLevel serverLevel && !serverLevel.getGameRules()
                .get(GameRules.ALLOW_EYES_OF_ENDER_USE)) {
            return InteractionResult.FAIL;
        }
        // tessera 26.2 end - gamerule for ender_pearl_use
  • Der Endportal block wurde angepasst, sodass es nicht möglich ist ins End zu kommen falls ein schon geöffnetes Portal in der Overworld spawned und die gamerule inaktiv ist.
// tessera 26.2 start - gamerule for ender_pearl_use
import net.minecraft.world.level.gamerules.GameRules;
import net.minecraft.world.effect.MobEffectInstance;
import org.bukkit.event.player.PlayerTeleportEvent;
import java.util.concurrent.ConcurrentHashMap;
import net.minecraft.world.effect.MobEffects;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import org.bukkit.Location;
import java.util.UUID;
// tessera 26.2 end - gamerule for ender_pearl_use

public class EndPortalBlock extends BaseEntityBlock implements Portal {
    public static final MapCodec<EndPortalBlock> CODEC = simpleCodec(EndPortalBlock::new);
    private static final VoxelShape SHAPE = Block.column(16.0, 6.0, 12.0);

    // tessera 26.2 start - gamerule for ender_pearl_use
    private static final Set<UUID> END_PORTAL_PUNISHMENT = ConcurrentHashMap.newKeySet();
    // tessera 26.2 end - gamerule for ender_pearl_use
  • Die Methode portalAsync wurde angepasst um die gamerule zu respektieren.
  // Folia start - region threading
  @Override
  public boolean portalAsync(ServerLevel sourceWorld, Entity portalTarget, BlockPos portalPos) {
        if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(portalTarget)) {
            return false;
        }
        if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(sourceWorld, portalPos)) {
            return false;
        }

        // tessera 26.2 start check for gamerule (are we allowed to travel using portals)
        //  this needs to be after the tick threadd for entity and sourceworld
        if(!sourceWorld.getGameRules().get(GameRules.ALLOW_EYES_OF_ENDER_USE)) {
            // if this is a player fire an effect,
            //  and ******************************* <- definetly I don't wanna spoil to much
            //  if you find a lit portal let me know :) Only one way to find out what happens :)
            if (portalTarget instanceof ServerPlayer player) {
                punish(player, sourceWorld); // implementation not included. 
            }

            return false;
        }
        // tessera 26.2 end check for gamerule (are we allowed to travel using portals)

        return portalTarget.endPortalLogicAsync(portalPos);
  }
  // Folia end - region threading
Alpha

Tessera 0.0.3

Fehler in gamerule

allow_entering_nether_using_portals funktioniert nicht

Minecraft 26.2
TesseraGamerulesfix

Geändert

  • portalAsync hat die funktionsprüfung auf die Spielregel ‘allow_entering_nether_using_portals’ bekommen.

(Wenn die gamerule auf false steht, können Nether Portale aktiviert werden, aber sie teleortieren nicht den spieler.)

    @Override
    public boolean portalAsync(ServerLevel sourceWorld, Entity portalTarget, BlockPos portalPos) {
        if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(portalTarget)) {
            return false;
        }
        if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(sourceWorld, portalPos)) {
            return false;
        }
        // tessera 26.2 start check for gamerule (are we allowed to travel using portals)
        //  moved after the code for checking if thats for a player
        if(!sourceWorld.getGameRules().get(GameRules.ALLOW_ENTERING_NETHER_USING_PORTALS)){
            if(portalTarget instanceof Player player) 
                punish(player, sourceWorld); // implementation not included
            return false;
        }
        // tessera 26.2 end check for gamerule (are we allowed to travel using portals)
        return portalTarget.netherPortalLogicAsync(portalPos);
    } 
Alpha

Tessera 0.0.2

Paper upstream API fix

paper upstream (paper api will be updated)

Minecraft 26.2
TesseraStabilitätPaper-upstream

Hinzugefügt

  • paper upstream methode setAllowMonsterSpawning wurde hinzugefügt
    @Override
    public void setAllowMonsterSpawning(boolean allowMonsters) {
        this.world.setSpawnSettings(allowMonsters);
    }
  • paper upstream methoden createTrimMaterial und createTrimPattern wurden hinzugefügt.
    import org.bukkit.inventory.meta.trim.TrimMaterial;
    import org.bukkit.inventory.meta.trim.TrimPattern;
    
    
    @Override
    public TrimMaterial createTrimMaterial(Consumer<RegistryBuilderFactory<TrimMaterial, 
                ? extends TrimMaterialRegistryEntry.Builder>> value) {
        return Conversions.global().createApiInstanceFromBuilder(RegistryKey.TRIM_MATERIAL, value);
    }

    @Override
    public TrimPattern createTrimPattern(Consumer<RegistryBuilderFactory<TrimPattern, 
                ? extends TrimPatternRegistryEntry.Builder>> value) {
        return Conversions.global().createApiInstanceFromBuilder(RegistryKey.TRIM_PATTERN, value);
    }
  • paper upstream methode getClientBrandName() wurde hinzugefügt.
    public @Nullable String getClientBrandName() {
        if(this.packetListener.connection instanceof PlayerCommonConnection playerCommonConnection) {
            return playerCommonConnection.getClientBrandName();
        }
        return "moddedorshit";
    }
  • paper upstream methode getClientBrandName() wurde hinzugefügt, nein das kein schreibfehler.. die gibts nun zweimal :D.
    import org.jspecify.annotations.Nullable;
    
    public @Nullable String getClientBrandName() {
        if(this.packetListener.connection instanceof PlayerCommonConnection playerCommonConnection) {
            return playerCommonConnection.getClientBrandName();
        }
        return "moddedorshit";
    }
Alpha

Tessera 0.0.1

First compile

Tessera build 001 - first compile

Minecraft 26.2
TesseraFirst alpha build

Beschreibung

  • Paper API upstream class errors in folia behoben.
  • first test compile erfolgreich.