Added an entity, weathertype, and gamemode registry.

This commit is contained in:
Matthew Miller
2018-07-19 22:41:26 +10:00
parent 572bf04482
commit 663dd1f4d8
33 changed files with 747 additions and 115 deletions

View File

@ -22,7 +22,7 @@ package com.sk89q.worldedit.sponge;
import com.flowpowered.math.vector.Vector3d;
import com.sk89q.worldedit.entity.BaseEntity;
import com.sk89q.worldedit.entity.Entity;
import com.sk89q.worldedit.entity.metadata.EntityType;
import com.sk89q.worldedit.entity.metadata.EntityProperties;
import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.NullWorld;
@ -90,8 +90,8 @@ class SpongeEntity implements Entity {
public <T> T getFacet(Class<? extends T> cls) {
org.spongepowered.api.entity.Entity entity = entityRef.get();
if (entity != null) {
if (EntityType.class.isAssignableFrom(cls)) {
return (T) new SpongeEntityType(entity);
if (EntityProperties.class.isAssignableFrom(cls)) {
return (T) new SpongeEntityProperties(entity);
} else {
return null;
}

View File

@ -21,7 +21,7 @@ package com.sk89q.worldedit.sponge;
import static com.google.common.base.Preconditions.checkNotNull;
import com.sk89q.worldedit.entity.metadata.EntityType;
import com.sk89q.worldedit.entity.metadata.EntityProperties;
import org.spongepowered.api.data.key.Keys;
import org.spongepowered.api.entity.Entity;
import org.spongepowered.api.entity.ExperienceOrb;
@ -46,11 +46,11 @@ import org.spongepowered.api.text.Text;
import java.util.Optional;
public class SpongeEntityType implements EntityType {
public class SpongeEntityProperties implements EntityProperties {
private final Entity entity;
public SpongeEntityType(Entity entity) {
public SpongeEntityProperties(Entity entity) {
checkNotNull(entity);
this.entity = entity;
}

View File

@ -23,6 +23,8 @@ import com.flowpowered.math.vector.Vector3d;
import com.sk89q.util.StringUtil;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.blocks.BaseItemStack;
import com.sk89q.worldedit.world.gamemode.GameMode;
import com.sk89q.worldedit.world.gamemode.GameModes;
import com.sk89q.worldedit.world.item.ItemTypes;
import com.sk89q.worldedit.entity.BaseEntity;
import com.sk89q.worldedit.extension.platform.AbstractPlayerActor;
@ -170,6 +172,17 @@ public class SpongePlayer extends AbstractPlayerActor {
return null;
}
@Override
public GameMode getGameMode() {
return GameModes.get(player.getGameModeData().type().get().getId());
}
@Override
public void setGameMode(GameMode gameMode) {
player.getGameModeData().type().set(Sponge.getRegistry().getType(org.spongepowered.api.entity.living.player.gamemode.GameMode.class,
gameMode.getId()).get());
}
@Override
public SessionKey getSessionKey() {
return new SessionKeyImpl(player.getUniqueId(), player.getName());

View File

@ -19,6 +19,8 @@
package com.sk89q.worldedit.sponge;
import static com.google.common.base.Preconditions.checkNotNull;
import com.flowpowered.math.vector.Vector3d;
import com.flowpowered.math.vector.Vector3i;
import com.sk89q.worldedit.EditSession;
@ -27,15 +29,17 @@ import com.sk89q.worldedit.Vector2D;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.blocks.BaseItemStack;
import com.sk89q.worldedit.registry.state.Property;
import com.sk89q.worldedit.world.block.BlockStateHolder;
import com.sk89q.worldedit.world.item.ItemTypes;
import com.sk89q.worldedit.entity.BaseEntity;
import com.sk89q.worldedit.entity.Entity;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.registry.state.Property;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.AbstractWorld;
import com.sk89q.worldedit.world.biome.BaseBiome;
import com.sk89q.worldedit.world.block.BlockStateHolder;
import com.sk89q.worldedit.world.item.ItemTypes;
import com.sk89q.worldedit.world.weather.WeatherType;
import com.sk89q.worldedit.world.weather.WeatherTypes;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.block.BlockSnapshot;
import org.spongepowered.api.block.BlockState;
@ -49,15 +53,15 @@ import org.spongepowered.api.entity.EntityType;
import org.spongepowered.api.entity.EntityTypes;
import org.spongepowered.api.world.BlockChangeFlags;
import org.spongepowered.api.world.World;
import org.spongepowered.api.world.weather.Weather;
import javax.annotation.Nullable;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import static com.google.common.base.Preconditions.checkNotNull;
import javax.annotation.Nullable;
/**
* An adapter to Minecraft worlds for WorldEdit.
@ -266,7 +270,7 @@ public abstract class SpongeWorld extends AbstractWorld {
public Entity createEntity(Location location, BaseEntity entity) {
World world = getWorld();
EntityType entityType = Sponge.getRegistry().getType(EntityType.class, entity.getTypeId()).get();
EntityType entityType = Sponge.getRegistry().getType(EntityType.class, entity.getType().getId()).get();
Vector3d pos = new Vector3d(location.getX(), location.getY(), location.getZ());
org.spongepowered.api.entity.Entity newEnt = world.createEntity(entityType, pos);
@ -289,6 +293,26 @@ public abstract class SpongeWorld extends AbstractWorld {
return null;
}
@Override
public WeatherType getWeather() {
return WeatherTypes.get(getWorld().getWeather().getId());
}
@Override
public long getRemainingWeatherDuration() {
return getWorld().getRemainingDuration();
}
@Override
public void setWeather(WeatherType weatherType) {
getWorld().setWeather(Sponge.getRegistry().getType(Weather.class, weatherType.getId()).get());
}
@Override
public void setWeather(WeatherType weatherType, long duration) {
getWorld().setWeather(Sponge.getRegistry().getType(Weather.class, weatherType.getId()).get(), duration);
}
/**
* Thrown when the reference to the world is lost.
*/