2018-09-13 12:03:28 -04:00
package noppes.npcs.scripted ;
2022-06-12 01:26:23 -05:00
import java.util.* ;
2018-09-13 12:03:28 -04:00
import net.minecraft.block.Block ;
2022-07-07 20:49:03 -05:00
import net.minecraft.block.BlockLiquid ;
2018-09-13 12:03:28 -04:00
import net.minecraft.entity.Entity ;
import net.minecraft.entity.effect.EntityLightningBolt ;
import net.minecraft.entity.player.EntityPlayer ;
2022-05-03 23:09:21 -05:00
import net.minecraft.entity.player.EntityPlayerMP ;
2018-09-13 12:03:28 -04:00
import net.minecraft.init.Blocks ;
import net.minecraft.nbt.NBTBase ;
import net.minecraft.nbt.NBTBase.NBTPrimitive ;
import net.minecraft.nbt.NBTTagCompound ;
import net.minecraft.nbt.NBTTagString ;
import net.minecraft.server.MinecraftServer ;
import net.minecraft.tileentity.TileEntity ;
import net.minecraft.tileentity.TileEntitySign ;
2022-07-06 17:51:26 -05:00
import net.minecraft.util.AxisAlignedBB ;
2022-05-24 03:06:16 -05:00
import net.minecraft.util.Vec3 ;
2021-10-12 03:23:56 -05:00
import net.minecraft.util.math.BlockPos ;
2018-09-13 12:03:28 -04:00
import net.minecraft.world.WorldServer ;
2022-06-10 17:25:58 -05:00
import noppes.npcs.CustomNpcs ;
2018-09-13 12:03:28 -04:00
import noppes.npcs.NoppesUtilServer ;
import noppes.npcs.blocks.tiles.TileBigSign ;
import noppes.npcs.controllers.ScriptController ;
import noppes.npcs.controllers.ServerCloneController ;
2021-10-18 06:33:39 -05:00
import noppes.npcs.scripted.interfaces.IBlock ;
2022-05-26 02:10:25 -05:00
import noppes.npcs.scripted.interfaces.IPos ;
2022-05-11 22:08:31 -05:00
import noppes.npcs.scripted.interfaces.IParticle ;
import noppes.npcs.scripted.interfaces.ITileEntity ;
2022-05-11 16:43:14 -05:00
import noppes.npcs.scripted.interfaces.entity.IEntity ;
2022-05-11 22:08:31 -05:00
import noppes.npcs.scripted.interfaces.entity.IPlayer ;
2022-05-11 16:43:14 -05:00
import noppes.npcs.scripted.interfaces.item.IItemStack ;
2021-10-18 06:33:39 -05:00
import noppes.npcs.scripted.interfaces.IWorld ;
2018-09-13 12:03:28 -04:00
2021-10-18 06:33:39 -05:00
public class ScriptWorld implements IWorld {
2018-09-13 12:03:28 -04:00
private static Map < String , Object > tempData = new HashMap < String , Object > ();
2021-09-30 21:44:30 -05:00
public WorldServer world ;
2018-09-13 12:03:28 -04:00
public ScriptWorld ( WorldServer world ){
this . world = world ;
}
2021-09-30 21:44:30 -05:00
2022-06-10 17:25:58 -05:00
public static ScriptWorld createNew ( int dimensionId ) {
WorldServer [] worlds = CustomNpcs . getServer (). worldServers ;
WorldServer world = worlds [ 0 ] ;
for ( WorldServer w : worlds ) {
if ( w . provider . dimensionId == dimensionId ) {
world = w ;
}
}
2021-09-30 21:44:30 -05:00
return new ScriptWorld ( world );
}
2018-09-13 12:03:28 -04:00
/**
* @return The worlds time
*/
public long getTime (){
return world . getWorldTime ();
}
/**
* @return The total world time
*/
public long getTotalTime (){
return world . getTotalWorldTime ();
}
2022-05-03 23:09:21 -05:00
public boolean areAllPlayersAsleep (){
return world . areAllPlayersAsleep ();
}
2022-05-27 15:31:02 -05:00
2018-09-13 12:03:28 -04:00
/**
* @param x World position x
* @param y World position y
* @param z World position z
* @return The block at the given position. Returns null if there isn't a block
*/
2021-10-12 03:23:56 -05:00
public IBlock getBlock ( int x , int y , int z ){
2018-09-13 12:03:28 -04:00
Block block = world . getBlock ( x , y , z );
if ( block == null || block . isAir ( world , x , y , z ))
return null ;
2022-05-17 18:02:09 -05:00
return NpcAPI . Instance (). getIBlock ( world , block , new BlockPos ( x , y , z ));
2018-09-13 12:03:28 -04:00
}
2022-05-03 23:09:21 -05:00
public boolean isBlockFreezable ( int x , int y , int z ){
return world . isBlockFreezable ( x , y , z );
}
public boolean isBlockFreezableNaturally ( int x , int y , int z ){
return world . isBlockFreezableNaturally ( x , y , z );
}
public boolean canBlockFreeze ( int x , int y , int z , boolean adjacentToWater ){
return world . canBlockFreeze ( x , y , z , adjacentToWater );
}
public boolean canBlockFreezeBody ( int x , int y , int z , boolean adjacentToWater ){
return world . canBlockFreezeBody ( x , y , z , adjacentToWater );
}
public boolean canSnowAt ( int x , int y , int z , boolean checkLight ){
return world . func_147478_e ( x , y , z , checkLight );
}
public boolean canSnowAtBody ( int x , int y , int z , boolean checkLight ){
return world . canSnowAtBody ( x , y , z , checkLight );
}
public IBlock getTopBlock ( int x , int z ){
int y ;
for ( y = 63 ; ! world . isAirBlock ( x , y + 1 , z ); ++ y ) {;}
Block block = world . getBlock ( x , y , z );
2022-05-17 18:02:09 -05:00
return NpcAPI . Instance (). getIBlock ( world , block , new BlockPos ( x , y , z ));
2022-05-03 23:09:21 -05:00
}
public int getHeightValue ( int x , int z ){
return world . getHeightValue ( x , z );
}
public int getChunkHeightMapMinimum ( int x , int z ){
return world . getChunkHeightMapMinimum ( x , z );
}
public int getBlockMetadata ( int x , int y , int z ){
return world . getBlockMetadata ( x , y , z );
}
public boolean setBlockMetadataWithNotify ( int x , int y , int z , int metadata , int flag ){
return world . setBlockMetadataWithNotify ( x , y , z , metadata , flag );
}
public boolean canBlockSeeTheSky ( int x , int y , int z ){
return world . canBlockSeeTheSky ( x , y , z );
}
public int getFullBlockLightValue ( int x , int y , int z ){
return world . getFullBlockLightValue ( x , y , z );
}
public int getBlockLightValue ( int x , int y , int z ){
return world . getBlockLightValue ( x , y , z );
}
2022-05-11 22:08:31 -05:00
public void playSoundAtEntity ( IEntity entity , String sound , float volume , float pitch ){
2022-05-03 23:09:21 -05:00
world . playSoundAtEntity ( entity . getMCEntity (), sound , volume , pitch );
}
2022-05-11 22:08:31 -05:00
public void playSoundToNearExcept ( IPlayer player , String sound , float volume , float pitch ){
2022-05-03 23:09:21 -05:00
world . playSoundToNearExcept (( EntityPlayerMP ) player . getMCEntity (), sound , volume , pitch );
}
2022-05-11 13:30:13 -05:00
public IEntity getEntityByID ( int id ){
2022-05-11 22:08:31 -05:00
return NpcAPI . Instance (). getIEntity ( world . getEntityByID ( id ));
2022-05-03 23:09:21 -05:00
}
2022-05-11 22:08:31 -05:00
public boolean spawnEntityInWorld ( IEntity entity ){
2022-05-03 23:09:21 -05:00
return world . spawnEntityInWorld ( entity . getMCEntity ());
}
2022-05-11 22:08:31 -05:00
public IPlayer getClosestPlayerToEntity ( IEntity entity , double range ){
return ( IPlayer ) NpcAPI . Instance (). getIEntity ( world . getClosestPlayerToEntity ( entity . getMCEntity (), range ));
2022-05-03 23:09:21 -05:00
}
2022-05-11 22:08:31 -05:00
public IPlayer getClosestPlayer ( double x , double y , double z , double range ){
return ( IPlayer ) NpcAPI . Instance (). getIEntity ( world . getClosestPlayer ( x , y , z , range ));
2022-05-03 23:09:21 -05:00
}
2022-05-11 22:08:31 -05:00
public IPlayer getClosestVulnerablePlayerToEntity ( IEntity entity , double range ){
return ( IPlayer ) NpcAPI . Instance (). getIEntity ( world . getClosestVulnerablePlayerToEntity ( entity . getMCEntity (), range ));
2022-05-03 23:09:21 -05:00
}
2022-05-11 22:08:31 -05:00
public IPlayer getClosestVulnerablePlayer ( double x , double y , double z , double range ){
return ( IPlayer ) NpcAPI . Instance (). getIEntity ( world . getClosestVulnerablePlayer ( x , y , z , range ));
2022-05-03 23:09:21 -05:00
}
2022-05-11 22:08:31 -05:00
public int countEntities ( IEntity entity ){
2022-05-03 23:09:21 -05:00
return world . countEntities ( entity . getMCEntity (). getClass ());
}
2022-06-12 01:26:23 -05:00
public IEntity [] getLoadedEntities () {
ArrayList < IEntity > list = new ArrayList <> ();
for ( Object obj : world . loadedEntityList ) {
list . add ( NpcAPI . Instance (). getIEntity (( Entity ) obj ));
}
return list . toArray ( new IEntity [ 0 ] );
}
2022-07-06 17:51:26 -05:00
public IEntity [] getEntitiesNear ( IPos position , double range ) {
ArrayList < IEntity > list = new ArrayList <> ();
List < Entity > entities = world . getEntitiesWithinAABB ( Entity . class , AxisAlignedBB . getBoundingBox (
position . getX () - range , position . getY () - range , position . getZ () - range ,
position . getX () + range , position . getY () + range , position . getZ () + range ));
for ( Entity entity : entities ){
list . add ( NpcAPI . Instance (). getIEntity ( entity ));
}
2022-07-06 18:12:32 -05:00
list . sort (( e1 , e2 ) -> {
double dist1 = e1 . getPos (). distanceTo ( position );
double dist2 = e2 . getPos (). distanceTo ( position );
if ( dist1 > dist2 ) {
return 1 ;
} else if ( dist1 < dist2 ) {
return - 1 ;
}
return 0 ;
});
2022-07-06 17:51:26 -05:00
return list . toArray ( new IEntity [ 0 ] );
}
2022-07-06 18:12:32 -05:00
public IEntity [] getEntitiesNear ( double x , double y , double z , double range ) {
return getEntitiesNear ( new ScriptBlockPos ( new BlockPos ( x , y , z )), range );
}
2022-05-11 22:08:31 -05:00
public void setTileEntity ( int x , int y , int z , ITileEntity tileEntity ){
2022-05-03 23:09:21 -05:00
world . setTileEntity ( x , y , z , tileEntity . getMCTileEntity ());
}
public void removeTileEntity ( int x , int y , int z ){
world . removeTileEntity ( x , y , z );
}
public boolean isBlockFullCube ( int x , int y , int z ){
return world . func_147469_q ( x , y , z );
}
public long getSeed (){
return world . getSeed ();
}
public void setSpawnLocation ( int x , int y , int z ){
world . setSpawnLocation ( x , y , z );
}
public boolean canLightningStrikeAt ( int x , int y , int z ){
return world . canLightningStrikeAt ( x , y , z );
}
public boolean isBlockHighHumidity ( int x , int y , int z ){
return world . isBlockHighHumidity ( x , y , z );
}
2022-05-26 02:10:25 -05:00
/**
* @param pos
* @return The block at the given position. Returns null if there isn't a block
*/
public IBlock getBlock ( IPos pos ){
return getBlock ( pos . getX (), pos . getY (), pos . getZ ());
}
2018-09-13 12:03:28 -04:00
/**
* @param x World position x
* @param y World position y
* @param z World position z
* @return Text from signs
* @since 1.7.10d
*/
public String getSignText ( int x , int y , int z ){
TileEntity tile = world . getTileEntity ( x , y , z );
if ( tile instanceof TileBigSign )
return (( TileBigSign ) tile ). getText ();
if ( tile instanceof TileEntitySign ){
TileEntitySign tileSign = ( TileEntitySign ) tile ;
String s = tileSign . signText [ 0 ] + "\n" ;
s += tileSign . signText [ 1 ] + "\n" ;
s += tileSign . signText [ 2 ] + "\n" ;
s += tileSign . signText [ 3 ] ;
return s ;
}
return null ;
}
2022-05-26 01:51:05 -05:00
public void setBlock ( int x , int y , int z , IBlock block ){
if ( block == null || block . getMCBlock (). isAir ( world , x , y , z )){
removeBlock ( x , y , z );
return ;
}
world . setBlock ( x , y , z , block . getMCBlock ());
}
2022-05-27 15:31:02 -05:00
2018-09-13 12:03:28 -04:00
/**
* @param x World position x
* @param y World position y
* @param z World position z
* @param item The block to be set
*/
2022-05-11 22:08:31 -05:00
public void setBlock ( int x , int y , int z , IItemStack item ){
2018-09-13 12:03:28 -04:00
if ( item == null ){
removeBlock ( x , y , z );
return ;
}
2022-05-11 22:08:31 -05:00
Block block = Block . getBlockFromItem ( item . getMCItemStack (). getItem ());
2018-09-13 12:03:28 -04:00
if ( block == null || block == Blocks . air )
return ;
world . setBlock ( x , y , z , block );
}
/**
* @param x World position x
* @param y World position y
* @param z World position z
*/
public void removeBlock ( int x , int y , int z ){
world . setBlock ( x , y , z , Blocks . air );
}
2022-05-27 15:31:02 -05:00
2022-07-07 20:49:03 -05:00
public IPos rayCastPos ( double [] startPos , double [] lookVector , int maxDistance , boolean stopOnBlock , boolean stopOnLiquid , boolean stopOnCollision ) {
2022-07-06 17:51:26 -05:00
if ( startPos . length != 3 || lookVector . length != 3 ) {
return null ;
}
IPos pos ;
Vec3 currentPos = Vec3 . createVectorHelper ( startPos [ 0 ] , startPos [ 1 ] , startPos [ 2 ] ); int rep = 0 ;
while ( rep ++ < maxDistance + 10 ) {
currentPos = currentPos . addVector ( lookVector [ 0 ] , lookVector [ 1 ] , lookVector [ 2 ] );
pos = new ScriptBlockPos ( new BlockPos ( currentPos . xCoord , currentPos . yCoord , currentPos . zCoord ));
IBlock block = getBlock (( int ) currentPos . xCoord , ( int ) currentPos . yCoord , ( int ) currentPos . zCoord );
2022-07-07 20:49:03 -05:00
if ( block != null && stopOnBlock ) {
if (( ! stopOnLiquid || block . getMCBlock () instanceof BlockLiquid )
2022-07-07 21:17:44 -05:00
&& ( ! stopOnCollision || block . canCollide ()))
2022-07-06 17:51:26 -05:00
return pos ;
}
double distance = Math . pow (
Math . pow ( currentPos . xCoord - startPos [ 0 ] , 2 )
+ Math . pow ( currentPos . yCoord - startPos [ 1 ] , 2 )
+ Math . pow ( currentPos . zCoord - startPos [ 2 ] , 2 )
, 0 . 5 );
if ( distance > maxDistance ) {
return pos ;
}
}
return null ;
}
2022-07-07 20:49:03 -05:00
public IPos rayCastPos ( double [] startPos , double [] lookVector , int maxDistance ) {
return rayCastPos ( startPos , lookVector , maxDistance , true , false , false );
}
public IPos rayCastPos ( IPos startPos , IPos lookVector , int maxDistance , boolean stopOnBlock , boolean stopOnLiquid , boolean stopOnCollision ) {
return rayCastPos ( new double [] { startPos . getX (), startPos . getY (), startPos . getZ ()}, lookVector . normalize (), maxDistance , stopOnBlock , stopOnLiquid , stopOnCollision );
}
2022-07-06 17:51:26 -05:00
public IPos rayCastPos ( IPos startPos , IPos lookVector , int maxDistance ) {
2022-07-07 20:49:03 -05:00
return rayCastPos ( new double [] { startPos . getX (), startPos . getY (), startPos . getZ ()}, lookVector . normalize (), maxDistance , true , false , false );
}
public IBlock rayCastBlock ( double [] startPos , double [] lookVector , int maxDistance , boolean stopOnBlock , boolean stopOnLiquid , boolean stopOnCollision ) {
return getBlock ( rayCastPos ( startPos , lookVector , maxDistance , stopOnBlock , stopOnLiquid , stopOnCollision ));
}
public IBlock rayCastBlock ( double [] startPos , double [] lookVector , int maxDistance ) {
return rayCastBlock ( startPos , lookVector , maxDistance , true , false , false );
}
public IBlock rayCastBlock ( IPos startPos , IPos lookVector , int maxDistance , boolean stopOnBlock , boolean stopOnLiquid , boolean stopOnCollision ) {
return rayCastBlock ( new double [] { startPos . getX (), startPos . getY (), startPos . getZ ()}, lookVector . normalize (), maxDistance , stopOnBlock , stopOnLiquid , stopOnCollision );
}
public IBlock rayCastBlock ( IPos startPos , IPos lookVector , int maxDistance ) {
return rayCastBlock ( new double [] { startPos . getX (), startPos . getY (), startPos . getZ ()}, lookVector . normalize (), maxDistance );
2022-07-06 17:51:26 -05:00
}
2022-05-26 02:10:25 -05:00
public IPos getNearestAir ( IPos pos , int maxHeight ) {
2022-05-24 03:06:16 -05:00
if ( pos == null ) return null ;
2022-05-26 02:10:25 -05:00
IPos currentPos = pos ;
2022-05-24 03:06:16 -05:00
IBlock block = null ; int rep = 0 ;
while ( rep ++ < maxHeight ) {
//check +x
2022-05-26 02:10:25 -05:00
currentPos = currentPos . add ( 1 , 0 , 0 );
block = getBlock ( currentPos );
2022-05-24 03:06:16 -05:00
if ( block == null ) break ;
//check -x
2022-05-26 02:10:25 -05:00
currentPos = currentPos . add ( - 2 , 0 , 0 );
block = getBlock ( currentPos );
2022-05-24 03:06:16 -05:00
if ( block == null ) break ;
//check +z
2022-05-26 02:10:25 -05:00
currentPos = currentPos . add ( 1 , 0 , 1 );
block = getBlock ( currentPos );
2022-05-24 03:06:16 -05:00
if ( block == null ) break ;
//check -z
2022-05-26 02:10:25 -05:00
currentPos = currentPos . add ( 0 , 0 , - 2 );
block = getBlock ( currentPos );
2022-05-24 03:06:16 -05:00
if ( block == null ) break ;
//check up 1
2022-05-26 02:10:25 -05:00
currentPos = currentPos . add ( 0 , 1 , 1 );
block = getBlock ( currentPos );
2022-05-24 03:06:16 -05:00
if ( block == null ) break ;
}
2022-05-26 02:10:25 -05:00
return currentPos ;
2022-05-24 03:06:16 -05:00
}
2022-05-27 15:31:02 -05:00
2022-05-24 03:06:16 -05:00
public boolean canSeeSky ( int x , int y , int z ) {
return world . canBlockSeeTheSky ( x , y , z );
}
2022-05-27 15:31:02 -05:00
2022-05-26 20:55:11 -05:00
public boolean canSeeSky ( IPos pos ) {
return canSeeSky ( pos . getX (), pos . getY (), pos . getZ ());
}
2022-05-27 15:31:02 -05:00
2018-09-13 12:03:28 -04:00
/**
* @param name The name of the player to be returned
* @return The Player with name. Null is returned when the player isnt found
*/
2022-05-11 22:08:31 -05:00
public IPlayer getPlayer ( String name ){
2018-09-13 12:03:28 -04:00
EntityPlayer player = world . getPlayerEntityByName ( name );
if ( player == null )
return null ;
2022-05-11 22:08:31 -05:00
return ( IPlayer ) NpcAPI . Instance (). getIEntity ( player );
2018-09-13 12:03:28 -04:00
}
2022-05-03 23:09:21 -05:00
2022-05-11 22:08:31 -05:00
public IPlayer getPlayerByUUID ( String uuid ){
return ( IPlayer ) NpcAPI . Instance (). getIEntity ( world . func_152378_a ( UUID . fromString ( uuid )));
2018-09-13 12:03:28 -04:00
}
/**
* @param time The world time to be set
*/
public void setTime ( long time ){
world . setWorldTime ( time );
}
2022-05-03 23:09:21 -05:00
2018-09-13 12:03:28 -04:00
/**
* @return Whether or not its daytime
*/
public boolean isDay (){
return world . getWorldTime () % 24000 < 12000 ;
}
/**
* @return Whether or not its currently raining
*/
public boolean isRaining (){
return world . getWorldInfo (). isRaining ();
}
/**
* @param bo Set if it's raining
*/
public void setRaining ( boolean bo ){
world . getWorldInfo (). setRaining ( bo );
}
/**
* @param x The x position
* @param y The y position
* @param z The z position
*/
public void thunderStrike ( double x , double y , double z ){
world . addWeatherEffect ( new EntityLightningBolt ( world , x , y , z ));
}
/**
* Sends a packet from the server to the client everytime its called. Probably should not use this too much.
* @param particle Particle name. Particle name list: http://minecraft.gamepedia.com/Particles
* @param x The x position
* @param y The y position
* @param z The z position
* @param dx Usually used for the x motion
* @param dy Usually used for the y motion
* @param dz Usually used for the z motion
* @param speed Speed of the particles, usually between 0 and 1
* @param count Particle count
*/
public void spawnParticle ( String particle , double x , double y , double z , double dx , double dy , double dz , double speed , int count ){
world . func_147487_a ( particle , x , y , z , count , dx , dy , dz , speed );
}
/**
* @param id The items name
* @param damage The damage value
* @param size The number of items in the item
* @return Returns the item
*/
2022-05-11 01:10:31 -05:00
public IItemStack createItem ( String id , int damage , int size ){
2022-05-11 17:12:48 -05:00
return NpcAPI . Instance (). createItem ( id , damage , size );
2018-09-13 12:03:28 -04:00
}
2021-09-08 13:41:57 -05:00
/**
2022-05-07 01:40:41 -05:00
* @param directory The particle's texture directory. Use only forward slashes when writing a directory. Example: "customnpcs:textures/particle/bubble.png"
* @return Returns ScriptParticle object
2021-09-08 13:41:57 -05:00
*/
2022-05-07 03:46:37 -05:00
@Deprecated
2022-05-11 22:08:31 -05:00
public IParticle createEntityParticle ( String directory ){
return NpcAPI . Instance (). createEntityParticle ( directory );
2021-09-08 13:41:57 -05:00
}
2022-05-07 01:40:41 -05:00
2018-09-13 12:03:28 -04:00
/**
* @param key Get temp data for this key
* @return Returns the stored temp data
*/
public Object getTempData ( String key ){
return tempData . get ( key );
}
/**
* Tempdata gets cleared when the server restarts. All worlds share the same temp data.
* @param key The key for the data stored
* @param value The data stored
*/
public void setTempData ( String key , Object value ){
tempData . put ( key , value );
}
/**
* @param key The key thats going to be tested against the temp data
* @return Whether or not temp data containes the key
*/
public boolean hasTempData ( String key ){
return tempData . containsKey ( key );
}
/**
* @param key The key for the temp data to be removed
*/
public void removeTempData ( String key ){
tempData . remove ( key );
}
/**
* Removes all tempdata
*/
public void clearTempData (){
tempData . clear ();
}
/**
* @param key The key of the data to be returned
* @return Returns the stored data
*/
public Object getStoredData ( String key ){
NBTTagCompound compound = ScriptController . Instance . compound ;
if ( ! compound . hasKey ( key ))
return null ;
NBTBase base = compound . getTag ( key );
if ( base instanceof NBTPrimitive )
return (( NBTPrimitive ) base ). func_150286_g ();
return (( NBTTagString ) base ). func_150285_a_ ();
}
/**
* Stored data persists through world restart. Unlike tempdata only Strings and Numbers can be saved
* @param key The key for the data stored
* @param value The data stored. This data can be either a Number or a String. Other data is not stored
*/
public void setStoredData ( String key , Object value ){
NBTTagCompound compound = ScriptController . Instance . compound ;
if ( value instanceof Number )
compound . setDouble ( key , (( Number ) value ). doubleValue ());
else if ( value instanceof String )
compound . setString ( key , ( String ) value );
ScriptController . Instance . shouldSave = true ;
}
/**
* @param key The key of the data to be checked
* @return Returns whether or not the stored data contains the key
*/
public boolean hasStoredData ( String key ){
return ScriptController . Instance . compound . hasKey ( key );
}
/**
* @param key The key of the data to be removed
*/
public void removeStoredData ( String key ){
ScriptController . Instance . compound . removeTag ( key );
ScriptController . Instance . shouldSave = true ;
}
/**
* Remove all stored data
*/
public void clearStoredData (){
ScriptController . Instance . compound = new NBTTagCompound ();
ScriptController . Instance . shouldSave = true ;
}
/**
* @param x Position x
* @param y Position y
* @param z Position z
* @param range Range of the explosion
* @param fire Whether or not the explosion does fire damage
* @param grief Whether or not the explosion does damage to blocks
*/
public void explode ( double x , double y , double z , float range , boolean fire , boolean grief ){
world . newExplosion ( null , x , y , z , range , fire , grief );
}
2022-05-11 22:08:31 -05:00
public IPlayer [] getAllServerPlayers (){
2018-09-13 12:03:28 -04:00
List < EntityPlayer > list = MinecraftServer . getServer (). getConfigurationManager (). playerEntityList ;
2022-05-11 22:08:31 -05:00
IPlayer [] arr = new IPlayer [ list . size () ] ;
2018-09-13 12:03:28 -04:00
for ( int i = 0 ; i < list . size (); i ++ ){
2022-05-11 22:08:31 -05:00
arr [ i ] = ( IPlayer ) NpcAPI . Instance (). getIEntity ( list . get ( i ));
2018-09-13 12:03:28 -04:00
}
return arr ;
}
2022-05-27 15:54:12 -05:00
public String [] getPlayerNames () {
IPlayer [] players = getAllServerPlayers ();
String [] names = new String [ players . length ] ;
for ( int i = 0 ; i < names . length ; ++ i ) names [ i ] = players [ i ] . getDisplayName ();
return names ;
}
2018-09-13 12:03:28 -04:00
/**
* @since 1.7.10c
* @param x Position x
* @param z Position z
* @return Returns the name of the biome
*/
public String getBiomeName ( int x , int z ){
return world . getBiomeGenForCoords ( x , z ). biomeName ;
}
/**
* Lets you spawn a server side cloned entity
* @param x The x position the clone will be spawned at
* @param y The y position the clone will be spawned at
* @param z The z position the clone will be spawned at
* @param tab The tab in which the clone is
* @param name Name of the cloned entity
* @return Returns the entity which was spawned
*/
2022-07-06 01:29:43 -07:00
public IEntity spawnClone ( int x , int y , int z , int tab , String name , boolean ignoreProtection ){
2018-09-13 12:03:28 -04:00
NBTTagCompound compound = ServerCloneController . Instance . getCloneData ( null , name , tab );
if ( compound == null )
return null ;
2022-07-06 01:29:43 -07:00
Entity entity ;
if ( ! ignoreProtection ) {
entity = NoppesUtilServer . spawnCloneWithProtection ( compound , x , y , z , world );
} else {
entity = NoppesUtilServer . spawnClone ( compound , x , y , z , world );
}
return entity == null ? null : NpcAPI . Instance (). getIEntity ( entity );
}
public IEntity spawnClone ( int x , int y , int z , int tab , String name ) {
return this . spawnClone ( x , y , z , tab , name , true );
2018-09-13 12:03:28 -04:00
}
public ScriptScoreboard getScoreboard (){
return new ScriptScoreboard ();
}
2021-10-12 03:23:56 -05:00
public BlockPos getMCBlockPos ( int x , int y , int z ){
return new BlockPos ( x , y , z );
}
2018-09-13 12:03:28 -04:00
/**
* @since 1.7.10c
* Expert use only
* @return Returns minecraft world object
*/
2021-10-19 16:59:09 -05:00
public WorldServer getMCWorld (){
return this . world ;
2018-09-13 12:03:28 -04:00
}
2021-11-22 01:10:27 -06:00
public int getDimensionID (){
return world . provider . dimensionId ;
}
2018-09-13 12:03:28 -04:00
}