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