From d70d2c06bb8fafdb72c6778b29fb050618015ab3 Mon Sep 17 00:00:00 2001
From: modmuss50 <modmuss50@gmail.com>
Date: Wed, 18 Dec 2024 18:42:55 +0000
Subject: [PATCH] (Block)EntityType builders use @Nullable Booleans

---
 .../v1/block/entity/FabricBlockEntityTypeBuilder.java |  3 ++-
 .../impl/object/builder/ExtendedBlockEntityType.java  | 11 +++++++----
 .../impl/object/builder/FabricEntityTypeImpl.java     |  4 ++--
 .../mixin/object/builder/EntityTypeBuilderMixin.java  |  2 ++
 .../fabric/mixin/object/builder/EntityTypeMixin.java  |  7 +++++--
 5 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/api/object/builder/v1/block/entity/FabricBlockEntityTypeBuilder.java b/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/api/object/builder/v1/block/entity/FabricBlockEntityTypeBuilder.java
index 0907551fb..600ed41bb 100644
--- a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/api/object/builder/v1/block/entity/FabricBlockEntityTypeBuilder.java
+++ b/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/api/object/builder/v1/block/entity/FabricBlockEntityTypeBuilder.java
@@ -38,7 +38,8 @@ import net.fabricmc.fabric.impl.object.builder.ExtendedBlockEntityType;
 public final class FabricBlockEntityTypeBuilder<T extends BlockEntity> {
 	private final Factory<? extends T> factory;
 	private final Set<Block> blocks = new HashSet<>();
-	private boolean canPotentiallyExecuteCommands = false;
+	@Nullable
+	private Boolean canPotentiallyExecuteCommands = null;
 
 	private FabricBlockEntityTypeBuilder(Factory<? extends T> factory) {
 		this.factory = factory;
diff --git a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/impl/object/builder/ExtendedBlockEntityType.java b/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/impl/object/builder/ExtendedBlockEntityType.java
index a6d01edb6..07b44c1e3 100644
--- a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/impl/object/builder/ExtendedBlockEntityType.java
+++ b/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/impl/object/builder/ExtendedBlockEntityType.java
@@ -18,22 +18,25 @@ package net.fabricmc.fabric.impl.object.builder;
 
 import java.util.Set;
 
+import org.jetbrains.annotations.Nullable;
+
 import net.minecraft.block.Block;
 import net.minecraft.block.entity.BlockEntity;
 import net.minecraft.block.entity.BlockEntityType;
 
 public class ExtendedBlockEntityType<T extends BlockEntity> extends BlockEntityType<T> {
-	private final boolean canPotentiallyExecuteCommands;
+	@Nullable
+	private final Boolean canPotentiallyExecuteCommands;
 
-	public ExtendedBlockEntityType(BlockEntityFactory<? extends T> factory, Set<Block> blocks, boolean canPotentiallyExecuteCommands) {
+	public ExtendedBlockEntityType(BlockEntityFactory<? extends T> factory, Set<Block> blocks, @Nullable Boolean canPotentiallyExecuteCommands) {
 		super(factory, blocks);
 		this.canPotentiallyExecuteCommands = canPotentiallyExecuteCommands;
 	}
 
 	@Override
 	public boolean canPotentiallyExecuteCommands() {
-		if (canPotentiallyExecuteCommands) {
-			return true;
+		if (canPotentiallyExecuteCommands != null) {
+			return canPotentiallyExecuteCommands;
 		}
 
 		return super.canPotentiallyExecuteCommands();
diff --git a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/impl/object/builder/FabricEntityTypeImpl.java b/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/impl/object/builder/FabricEntityTypeImpl.java
index e2c7f067d..8f0107066 100644
--- a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/impl/object/builder/FabricEntityTypeImpl.java
+++ b/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/impl/object/builder/FabricEntityTypeImpl.java
@@ -35,9 +35,9 @@ import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRe
 import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityType;
 
 public interface FabricEntityTypeImpl {
-	void fabric_setAlwaysUpdateVelocity(Boolean alwaysUpdateVelocity);
+	void fabric_setAlwaysUpdateVelocity(@Nullable Boolean alwaysUpdateVelocity);
 
-	void fabric_setCanPotentiallyExecuteCommands(Boolean canPotentiallyExecuteCommands);
+	void fabric_setCanPotentiallyExecuteCommands(@Nullable Boolean canPotentiallyExecuteCommands);
 
 	interface Builder {
 		void fabric_setLivingEntityBuilder(Living<? extends LivingEntity> livingBuilder);
diff --git a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/EntityTypeBuilderMixin.java b/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/EntityTypeBuilderMixin.java
index fe8e896b5..eb1ecd8ba 100644
--- a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/EntityTypeBuilderMixin.java
+++ b/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/EntityTypeBuilderMixin.java
@@ -47,8 +47,10 @@ public abstract class EntityTypeBuilderMixin<T extends Entity> implements Fabric
 	public abstract EntityType<T> build(RegistryKey<EntityType<?>> registryKey);
 
 	@Unique
+	@Nullable
 	private Boolean alwaysUpdateVelocity = null;
 	@Unique
+	@Nullable
 	private Boolean canPotentiallyExecuteCommands = null;
 
 	@Unique
diff --git a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/EntityTypeMixin.java b/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/EntityTypeMixin.java
index 00c945b5e..08644ddc8 100644
--- a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/EntityTypeMixin.java
+++ b/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/EntityTypeMixin.java
@@ -16,6 +16,7 @@
 
 package net.fabricmc.fabric.mixin.object.builder;
 
+import org.jetbrains.annotations.Nullable;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.Unique;
 import org.spongepowered.asm.mixin.injection.At;
@@ -29,8 +30,10 @@ import net.fabricmc.fabric.impl.object.builder.FabricEntityTypeImpl;
 @Mixin(EntityType.class)
 public abstract class EntityTypeMixin implements FabricEntityTypeImpl {
 	@Unique
+	@Nullable
 	private Boolean alwaysUpdateVelocity;
 	@Unique
+	@Nullable
 	private Boolean canPotentiallyExecuteCommands;
 
 	@Inject(method = "alwaysUpdateVelocity", at = @At("HEAD"), cancellable = true)
@@ -48,12 +51,12 @@ public abstract class EntityTypeMixin implements FabricEntityTypeImpl {
 	}
 
 	@Override
-	public void fabric_setAlwaysUpdateVelocity(Boolean alwaysUpdateVelocity) {
+	public void fabric_setAlwaysUpdateVelocity(@Nullable Boolean alwaysUpdateVelocity) {
 		this.alwaysUpdateVelocity = alwaysUpdateVelocity;
 	}
 
 	@Override
-	public void fabric_setCanPotentiallyExecuteCommands(Boolean canPotentiallyExecuteCommands) {
+	public void fabric_setCanPotentiallyExecuteCommands(@Nullable Boolean canPotentiallyExecuteCommands) {
 		this.canPotentiallyExecuteCommands = canPotentiallyExecuteCommands;
 	}
 }