annotate WorldHandle methods with nullability and contract

This commit is contained in:
dfsek
2021-12-01 08:29:14 -07:00
parent 65d8dc803d
commit 2d7cf5151f
4 changed files with 25 additions and 42 deletions
@@ -12,17 +12,22 @@ import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.entity.EntityType; import com.dfsek.terra.api.entity.EntityType;
import com.dfsek.terra.api.util.vector.Vector3; import com.dfsek.terra.api.util.vector.Vector3;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
/** /**
* Interface to be implemented for world manipulation. * Interface to be implemented for world manipulation.
*/ */
public interface WorldHandle { public interface WorldHandle {
BlockState createBlockData(String data); @NotNull
@Contract("_ -> new")
BlockState createBlockData(@NotNull String data);
@NotNull
@Contract(pure = true)
BlockState air(); BlockState air();
BlockEntity createBlockEntity(Vector3 location, BlockState block, String snbt); @NotNull
EntityType getEntity(@NotNull String id);
EntityType getEntity(String id);
} }
@@ -23,14 +23,14 @@ import org.bukkit.Material;
import java.util.Locale; import java.util.Locale;
import com.dfsek.terra.api.block.entity.BlockEntity;
import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.entity.EntityType; import com.dfsek.terra.api.entity.EntityType;
import com.dfsek.terra.api.handle.WorldHandle; import com.dfsek.terra.api.handle.WorldHandle;
import com.dfsek.terra.api.util.vector.Vector3;
import com.dfsek.terra.bukkit.world.block.data.BukkitBlockState; import com.dfsek.terra.bukkit.world.block.data.BukkitBlockState;
import com.dfsek.terra.bukkit.world.entity.BukkitEntityType; import com.dfsek.terra.bukkit.world.entity.BukkitEntityType;
import org.jetbrains.annotations.NotNull;
public class BukkitWorldHandle implements WorldHandle { public class BukkitWorldHandle implements WorldHandle {
private final BlockState air; private final BlockState air;
@@ -40,23 +40,18 @@ public class BukkitWorldHandle implements WorldHandle {
} }
@Override @Override
public BlockState createBlockData(String data) { public @NotNull BlockState createBlockData(@NotNull String data) {
org.bukkit.block.data.BlockData bukkitData = Bukkit.createBlockData(data); org.bukkit.block.data.BlockData bukkitData = Bukkit.createBlockData(data);
return BukkitBlockState.newInstance(bukkitData); return BukkitBlockState.newInstance(bukkitData);
} }
@Override @Override
public BlockState air() { public @NotNull BlockState air() {
return air; return air;
} }
@Override @Override
public BlockEntity createBlockEntity(Vector3 location, BlockState block, String snbt) { public @NotNull EntityType getEntity(String id) {
return null;
}
@Override
public EntityType getEntity(String id) {
if(!id.startsWith("minecraft:")) throw new LoadException("Invalid entity identifier " + id); if(!id.startsWith("minecraft:")) throw new LoadException("Invalid entity identifier " + id);
return new BukkitEntityType(org.bukkit.entity.EntityType.valueOf(id.toUpperCase(Locale.ROOT).substring(10))); return new BukkitEntityType(org.bukkit.entity.EntityType.valueOf(id.toUpperCase(Locale.ROOT).substring(10)));
} }
@@ -22,24 +22,23 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.command.argument.BlockArgumentParser; import net.minecraft.command.argument.BlockArgumentParser;
import net.minecraft.nbt.StringNbtReader;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.Registry;
import com.dfsek.terra.api.block.entity.BlockEntity;
import com.dfsek.terra.api.entity.EntityType; import com.dfsek.terra.api.entity.EntityType;
import com.dfsek.terra.api.handle.WorldHandle; import com.dfsek.terra.api.handle.WorldHandle;
import com.dfsek.terra.api.util.vector.Vector3;
import com.dfsek.terra.fabric.block.FabricBlockState; import com.dfsek.terra.fabric.block.FabricBlockState;
import com.dfsek.terra.fabric.util.FabricAdapter; import com.dfsek.terra.fabric.util.FabricAdapter;
import org.jetbrains.annotations.NotNull;
public class FabricWorldHandle implements WorldHandle { public class FabricWorldHandle implements WorldHandle {
private static final com.dfsek.terra.api.block.state.BlockState AIR = FabricAdapter.adapt(Blocks.AIR.getDefaultState()); private static final com.dfsek.terra.api.block.state.BlockState AIR = FabricAdapter.adapt(Blocks.AIR.getDefaultState());
@Override @Override
public FabricBlockState createBlockData(String data) { public @NotNull FabricBlockState createBlockData(@NotNull String data) {
BlockArgumentParser parser = new BlockArgumentParser(new StringReader(data), true); BlockArgumentParser parser = new BlockArgumentParser(new StringReader(data), true);
try { try {
BlockState state = parser.parse(true).getBlockState(); BlockState state = parser.parse(true).getBlockState();
@@ -51,22 +50,12 @@ public class FabricWorldHandle implements WorldHandle {
} }
@Override @Override
public com.dfsek.terra.api.block.state.BlockState air() { public com.dfsek.terra.api.block.state.@NotNull BlockState air() {
return AIR; return AIR;
} }
@Override @Override
public BlockEntity createBlockEntity(Vector3 location, com.dfsek.terra.api.block.state.BlockState block, String snbt) { public @NotNull EntityType getEntity(@NotNull String id) {
try {
return (BlockEntity) net.minecraft.block.entity.BlockEntity.createFromNbt(FabricAdapter.adapt(location), (BlockState) block,
StringNbtReader.parse(snbt));
} catch(CommandSyntaxException e) {
throw new RuntimeException(e);
}
}
@Override
public EntityType getEntity(String id) {
Identifier identifier = Identifier.tryParse(id); Identifier identifier = Identifier.tryParse(id);
if(identifier == null) identifier = Identifier.tryParse(id); if(identifier == null) identifier = Identifier.tryParse(id);
return (EntityType) Registry.ENTITY_TYPE.get(identifier); return (EntityType) Registry.ENTITY_TYPE.get(identifier);
@@ -17,14 +17,13 @@
package com.dfsek.terra.sponge.handle; package com.dfsek.terra.sponge.handle;
import org.jetbrains.annotations.NotNull;
import org.spongepowered.api.block.BlockTypes; import org.spongepowered.api.block.BlockTypes;
import com.dfsek.terra.api.block.entity.BlockEntity;
import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.entity.EntityType; import com.dfsek.terra.api.entity.EntityType;
import com.dfsek.terra.api.handle.WorldHandle; import com.dfsek.terra.api.handle.WorldHandle;
import com.dfsek.terra.api.util.generic.Lazy; import com.dfsek.terra.api.util.generic.Lazy;
import com.dfsek.terra.api.util.vector.Vector3;
import com.dfsek.terra.sponge.block.SpongeBlockState; import com.dfsek.terra.sponge.block.SpongeBlockState;
@@ -36,22 +35,17 @@ public class SpongeWorldHandle implements WorldHandle {
} }
@Override @Override
public BlockState createBlockData(String data) { public @NotNull BlockState createBlockData(@NotNull String data) {
return new SpongeBlockState(org.spongepowered.api.block.BlockState.fromString(data)); return new SpongeBlockState(org.spongepowered.api.block.BlockState.fromString(data));
} }
@Override @Override
public BlockState air() { public @NotNull BlockState air() {
return air.value(); return air.value();
} }
@Override @Override
public BlockEntity createBlockEntity(Vector3 location, BlockState block, String snbt) { public @NotNull EntityType getEntity(@NotNull String id) {
return null; throw new UnsupportedOperationException();
}
@Override
public EntityType getEntity(String id) {
return null;
} }
} }