Merge pull request #26 from SenseiKiwi/master
Improved Rift Gateway Generation and Fixed Several Bugs
This commit is contained in:
commit
7831c86901
4 changed files with 232 additions and 204 deletions
|
@ -3,6 +3,7 @@ package StevenDimDoors.mod_pocketDim;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.material.Material;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.chunk.IChunkProvider;
|
import net.minecraft.world.chunk.IChunkProvider;
|
||||||
import StevenDimDoors.mod_pocketDim.helpers.dimHelper;
|
import StevenDimDoors.mod_pocketDim.helpers.dimHelper;
|
||||||
|
@ -20,6 +21,7 @@ public class RiftGenerator implements IWorldGenerator
|
||||||
private static final int MAX_RIFT_Y = 250;
|
private static final int MAX_RIFT_Y = 250;
|
||||||
private static final int CHUNK_LENGTH = 16;
|
private static final int CHUNK_LENGTH = 16;
|
||||||
private static final int GATEWAY_RADIUS = 4;
|
private static final int GATEWAY_RADIUS = 4;
|
||||||
|
private static final int MAX_GATEWAY_GENERATION_ATTEMPTS = 10;
|
||||||
private static DDProperties properties = null;
|
private static DDProperties properties = null;
|
||||||
|
|
||||||
public RiftGenerator()
|
public RiftGenerator()
|
||||||
|
@ -39,7 +41,9 @@ public class RiftGenerator implements IWorldGenerator
|
||||||
}
|
}
|
||||||
|
|
||||||
int x, y, z;
|
int x, y, z;
|
||||||
|
int attempts;
|
||||||
int blockID;
|
int blockID;
|
||||||
|
boolean valid;
|
||||||
LinkData link;
|
LinkData link;
|
||||||
|
|
||||||
//Randomly decide whether to place a cluster of rifts here
|
//Randomly decide whether to place a cluster of rifts here
|
||||||
|
@ -49,12 +53,16 @@ public class RiftGenerator implements IWorldGenerator
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
//Pick a random point on the surface of the chunk
|
//Pick a random point on the surface of the chunk
|
||||||
x = chunkX * CHUNK_LENGTH - random.nextInt(CHUNK_LENGTH);
|
x = chunkX * CHUNK_LENGTH + random.nextInt(CHUNK_LENGTH);
|
||||||
z = chunkZ * CHUNK_LENGTH - random.nextInt(CHUNK_LENGTH);
|
z = chunkZ * CHUNK_LENGTH + random.nextInt(CHUNK_LENGTH);
|
||||||
y = world.getHeightValue(x, z);
|
y = world.getHeightValue(x, z);
|
||||||
|
|
||||||
//If the point is within the acceptable altitude range and the block above is empty, then place a rift
|
//If the point is within the acceptable altitude range, the block above is empty, and we're
|
||||||
if (y >= MIN_RIFT_Y && y <= MAX_RIFT_Y && world.isAirBlock(x, y + 1, z))
|
//not building on bedrock, then generate a rift there
|
||||||
|
if (y >= MIN_RIFT_Y && y <= MAX_RIFT_Y && world.isAirBlock(x, y + 1, z) &&
|
||||||
|
world.getBlockId(x, y, z) != Block.bedrock.blockID && //<-- Stops Nether roof spawning. DO NOT REMOVE!
|
||||||
|
world.getBlockId(x, y - 1, z) != Block.bedrock.blockID &&
|
||||||
|
world.getBlockId(x, y - 2, z) != Block.bedrock.blockID)
|
||||||
{
|
{
|
||||||
//Create a link. If this is the first time, create a dungeon pocket and create a two-way link.
|
//Create a link. If this is the first time, create a dungeon pocket and create a two-way link.
|
||||||
//Otherwise, create a one-way link and connect to the destination of the first link.
|
//Otherwise, create a one-way link and connect to the destination of the first link.
|
||||||
|
@ -77,15 +85,21 @@ public class RiftGenerator implements IWorldGenerator
|
||||||
//This only happens if a rift cluster was NOT generated.
|
//This only happens if a rift cluster was NOT generated.
|
||||||
else if (random.nextInt(MAX_GATEWAY_GENERATION_CHANCE) < properties.GatewayGenerationChance)
|
else if (random.nextInt(MAX_GATEWAY_GENERATION_CHANCE) < properties.GatewayGenerationChance)
|
||||||
{
|
{
|
||||||
//Pick a random point on the surface of the chunk
|
valid = false;
|
||||||
x = chunkX * CHUNK_LENGTH - random.nextInt(CHUNK_LENGTH);
|
x = y = z = 0; //Stop the compiler from freaking out
|
||||||
z = chunkZ * CHUNK_LENGTH - random.nextInt(CHUNK_LENGTH);
|
|
||||||
y = world.getHeightValue(x, z);
|
//Check locations for the gateway until we are satisfied or run out of attempts.
|
||||||
|
for (attempts = 0; attempts < MAX_GATEWAY_GENERATION_ATTEMPTS && !valid; attempts++)
|
||||||
|
{
|
||||||
|
//Pick a random point on the surface of the chunk and check its materials
|
||||||
|
x = chunkX * CHUNK_LENGTH + random.nextInt(CHUNK_LENGTH);
|
||||||
|
z = chunkZ * CHUNK_LENGTH + random.nextInt(CHUNK_LENGTH);
|
||||||
|
y = world.getHeightValue(x, z);
|
||||||
|
valid = checkGatewayLocation(world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
//Check if the point is within the acceptable altitude range, the block above that point is empty,
|
//Build the gateway if we found a valid location
|
||||||
//and at least one of the two blocks under that point are opaque
|
if (valid)
|
||||||
if (y >= MIN_RIFT_Y && y <= MAX_RIFT_Y && world.isAirBlock(x, y + 1, z) &&
|
|
||||||
world.isBlockOpaqueCube(x, y - 2, z) || world.isBlockOpaqueCube(x, y - 1, z))
|
|
||||||
{
|
{
|
||||||
//Create a two-way link between the upper block of the gateway and a pocket dimension
|
//Create a two-way link between the upper block of the gateway and a pocket dimension
|
||||||
//That pocket dimension is where we'll start a dungeon!
|
//That pocket dimension is where we'll start a dungeon!
|
||||||
|
@ -112,39 +126,62 @@ public class RiftGenerator implements IWorldGenerator
|
||||||
if (Math.abs(xc) + Math.abs(zc) < random.nextInt(2) + 3)
|
if (Math.abs(xc) + Math.abs(zc) < random.nextInt(2) + 3)
|
||||||
{
|
{
|
||||||
//Place Stone Bricks
|
//Place Stone Bricks
|
||||||
world.setBlock(x + xc, y - 1, z + zc, blockID,0,2);
|
world.setBlock(x + xc, y - 1, z + zc, blockID, 0, 3);
|
||||||
}
|
}
|
||||||
else if (Math.abs(xc) + Math.abs(zc) < random.nextInt(3) + 3)
|
else if (Math.abs(xc) + Math.abs(zc) < random.nextInt(3) + 3)
|
||||||
{
|
{
|
||||||
//Place Cracked Stone Bricks
|
//Place Cracked Stone Bricks
|
||||||
world.setBlock(x + xc, y - 1, z + zc, blockID, 2, 2);
|
world.setBlock(x + xc, y - 1, z + zc, blockID, 2, 3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Use Chiseled Stone Bricks to top off the pillars around the door
|
//Use Chiseled Stone Bricks to top off the pillars around the door
|
||||||
world.setBlock(x, y + 2, z + 1, blockID, 3, 2);
|
world.setBlock(x, y + 2, z + 1, blockID, 3, 3);
|
||||||
world.setBlock(x, y + 2, z - 1, blockID, 3, 2);
|
world.setBlock(x, y + 2, z - 1, blockID, 3, 3);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Build the gateway out of Unraveled Fabric. Since nearly all the blocks in Limbo are of
|
//Build the gateway out of Unraveled Fabric. Since nearly all the blocks in Limbo are of
|
||||||
//that type, there is no point replacing the ground. Just build the tops of the columns here.
|
//that type, there is no point replacing the ground. Just build the tops of the columns here.
|
||||||
blockID = properties.LimboBlockID;
|
blockID = properties.LimboBlockID;
|
||||||
world.setBlock(x, y + 2, z + 1, blockID, 0, 2);
|
world.setBlock(x, y + 2, z + 1, blockID, 0, 3);
|
||||||
world.setBlock(x, y + 2, z - 1, blockID, 0, 2);
|
world.setBlock(x, y + 2, z - 1, blockID, 0, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Place the shiny transient door into a dungeon
|
//Place the shiny transient door into a dungeon
|
||||||
ItemRiftBlade.placeDoorBlock(world, x, y + 1, z, 0, mod_pocketDim.transientDoor);
|
ItemRiftBlade.placeDoorBlock(world, x, y + 1, z, 0, mod_pocketDim.transientDoor);
|
||||||
|
|
||||||
//Build the columns around the door
|
//Build the columns around the door
|
||||||
world.setBlock(x, y + 1, z - 1, blockID, 0, 2);
|
world.setBlock(x, y + 1, z - 1, blockID, 0, 3);
|
||||||
world.setBlock(x, y + 1, z + 1, blockID, 0, 2);
|
world.setBlock(x, y + 1, z + 1, blockID, 0, 3);
|
||||||
world.setBlock(x, y, z - 1, blockID, 0, 2);
|
world.setBlock(x, y, z - 1, blockID, 0, 3);
|
||||||
world.setBlock(x, y, z + 1, blockID, 0, 2);
|
world.setBlock(x, y, z + 1, blockID, 0, 3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean checkGatewayLocation(World world, int x, int y, int z)
|
||||||
|
{
|
||||||
|
//Check if the point is within the acceptable altitude range, the block above that point is empty,
|
||||||
|
//and the block two levels down is opaque and has a reasonable material. Plus that we're not building
|
||||||
|
//on top of bedrock.
|
||||||
|
return (y >= MIN_RIFT_Y &&
|
||||||
|
y <= MAX_RIFT_Y &&
|
||||||
|
world.isAirBlock(x, y + 1, z) &&
|
||||||
|
world.getBlockId(x, y, z) != Block.bedrock.blockID && //<-- Stops Nether roof spawning. DO NOT REMOVE!
|
||||||
|
world.getBlockId(x, y - 1, z) != Block.bedrock.blockID &&
|
||||||
|
checkFoundationMaterial(world, x, y - 2, z));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean checkFoundationMaterial(World world, int x, int y, int z)
|
||||||
|
{
|
||||||
|
//We check the material and opacity to prevent generating gateways on top of trees or houses,
|
||||||
|
//or on top of strange things like tall grass, water, slabs, or torches.
|
||||||
|
//We also want to avoid generating things on top of the Nether's bedrock!
|
||||||
|
Material material = world.getBlockMaterial(x, y, z);
|
||||||
|
return (material != Material.leaves && material != Material.wood && material != Material.pumpkin
|
||||||
|
&& world.isBlockOpaqueCube(x, y, z) && world.getBlockId(x, y, z) != Block.bedrock.blockID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,14 @@
|
||||||
package StevenDimDoors.mod_pocketDim.commands;
|
package StevenDimDoors.mod_pocketDim.commands;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.Collection;
|
||||||
|
|
||||||
import cpw.mods.fml.common.FMLCommonHandler;
|
|
||||||
|
|
||||||
import StevenDimDoors.mod_pocketDim.DimData;
|
|
||||||
import StevenDimDoors.mod_pocketDim.DungeonGenerator;
|
|
||||||
import StevenDimDoors.mod_pocketDim.LinkData;
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
|
||||||
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
|
||||||
import StevenDimDoors.mod_pocketDim.helpers.dimHelper;
|
|
||||||
import net.minecraft.command.CommandBase;
|
import net.minecraft.command.CommandBase;
|
||||||
import net.minecraft.command.ICommandSender;
|
import net.minecraft.command.ICommandSender;
|
||||||
import net.minecraft.util.MathHelper;
|
import net.minecraft.util.MathHelper;
|
||||||
import net.minecraft.world.MinecraftException;
|
import StevenDimDoors.mod_pocketDim.DungeonGenerator;
|
||||||
import net.minecraft.world.World;
|
import StevenDimDoors.mod_pocketDim.LinkData;
|
||||||
|
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
||||||
|
import StevenDimDoors.mod_pocketDim.helpers.dimHelper;
|
||||||
|
|
||||||
public class CommandAddDungeonRift extends CommandBase
|
public class CommandAddDungeonRift extends CommandBase
|
||||||
{
|
{
|
||||||
|
@ -54,39 +48,13 @@ public class CommandAddDungeonRift extends CommandBase
|
||||||
link = dimHelper.instance.createPocket(link,true, true);
|
link = dimHelper.instance.createPocket(link,true, true);
|
||||||
|
|
||||||
}
|
}
|
||||||
else if(var2.length!=0&&var2[0].equals("list"))
|
else if (var2.length != 0 && var2[0].equals("list"))
|
||||||
{
|
{
|
||||||
for(DungeonGenerator dungeonGen : dungeonHelper.registeredDungeons)
|
Collection<String> dungeonNames = dungeonHelper.getDungeonNames();
|
||||||
|
for (String name : dungeonNames)
|
||||||
{
|
{
|
||||||
String dungeonName =dungeonGen.schematicPath;
|
getCommandSenderAsPlayer(var1).sendChatToPlayer(name);
|
||||||
if(dungeonName.contains("DimDoors_Custom_schematics"))
|
|
||||||
{
|
|
||||||
dungeonName= dungeonName.substring(dungeonName.indexOf("DimDoors_Custom_schematics")+26);
|
|
||||||
}
|
|
||||||
|
|
||||||
dungeonName =dungeonName.replace("/", "").replace(".", "").replace("schematics", "").replace("schematic", "");
|
|
||||||
|
|
||||||
|
|
||||||
this.getCommandSenderAsPlayer(var1).sendChatToPlayer(dungeonName);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for(DungeonGenerator dungeonGen : dungeonHelper.customDungeons)
|
|
||||||
{
|
|
||||||
String dungeonName =dungeonGen.schematicPath;
|
|
||||||
if(dungeonName.contains("DimDoors_Custom_schematics"))
|
|
||||||
{
|
|
||||||
dungeonName= dungeonName.substring(dungeonName.indexOf("DimDoors_Custom_schematics")+26);
|
|
||||||
}
|
|
||||||
|
|
||||||
dungeonName =dungeonName.replace("/", "").replace(".", "").replace("schematics", "").replace("schematic", "");
|
|
||||||
|
|
||||||
|
|
||||||
this.getCommandSenderAsPlayer(var1).sendChatToPlayer(dungeonName);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(var2.length!=0)
|
else if(var2.length!=0)
|
||||||
|
|
|
@ -3,6 +3,8 @@ package StevenDimDoors.mod_pocketDim.helpers;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
@ -216,16 +218,19 @@ public class DungeonHelper
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void importCustomDungeons(String dir)
|
public void importCustomDungeons(String path)
|
||||||
{
|
{
|
||||||
File file = new File(dir);
|
File directory = new File(path);
|
||||||
File[] schematicNames = file.listFiles();
|
File[] schematicNames = directory.listFiles();
|
||||||
|
|
||||||
if (schematicNames!=null)
|
if (schematicNames != null)
|
||||||
{
|
{
|
||||||
for(File schematicFile: schematicNames)
|
for (File schematicFile: schematicNames)
|
||||||
{
|
{
|
||||||
this.registerCustomDungeon(schematicFile);
|
if (schematicFile.getName().endsWith(SCHEMATIC_FILE_EXTENSION))
|
||||||
|
{
|
||||||
|
registerCustomDungeon(schematicFile);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -657,4 +662,36 @@ public class DungeonHelper
|
||||||
}
|
}
|
||||||
dimHelper.dimList.get(incoming.destDimID).dungeonGenerator = dungeon;
|
dimHelper.dimList.get(incoming.destDimID).dungeonGenerator = dungeon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Collection<String> getDungeonNames() {
|
||||||
|
|
||||||
|
//Use a HashSet to guarantee that all dungeon names will be distinct.
|
||||||
|
//This shouldn't be necessary if we keep proper lists without repetitions,
|
||||||
|
//but it's a fool-proof workaround.
|
||||||
|
HashSet<String> dungeonNames = new HashSet<String>();
|
||||||
|
dungeonNames.addAll( parseDungeonNames(registeredDungeons) );
|
||||||
|
dungeonNames.addAll( parseDungeonNames(customDungeons) );
|
||||||
|
|
||||||
|
//Sort dungeon names alphabetically
|
||||||
|
ArrayList<String> sortedNames = new ArrayList<String>(dungeonNames);
|
||||||
|
Collections.sort(sortedNames);
|
||||||
|
return sortedNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ArrayList<String> parseDungeonNames(ArrayList<DungeonGenerator> dungeons)
|
||||||
|
{
|
||||||
|
String name;
|
||||||
|
File schematic;
|
||||||
|
ArrayList<String> names = new ArrayList<String>(dungeons.size());
|
||||||
|
|
||||||
|
for (DungeonGenerator dungeon : dungeons)
|
||||||
|
{
|
||||||
|
//Retrieve the file name and strip off the file extension
|
||||||
|
schematic = new File(dungeon.schematicPath);
|
||||||
|
name = schematic.getName();
|
||||||
|
name = name.substring(0, name.length() - SCHEMATIC_FILE_EXTENSION.length());
|
||||||
|
names.add(name);
|
||||||
|
}
|
||||||
|
return names;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -27,85 +27,80 @@ import net.minecraftforge.common.RotationHelper;
|
||||||
|
|
||||||
public class ItemStableFabric extends Item
|
public class ItemStableFabric extends Item
|
||||||
{
|
{
|
||||||
private Material doorMaterial;
|
private Material doorMaterial;
|
||||||
|
|
||||||
public ItemStableFabric(int par1, int par2)
|
public ItemStableFabric(int par1, int par2)
|
||||||
{
|
{
|
||||||
super(par1);
|
super(par1);
|
||||||
// this.setitemIcon(Item.doorWood.getIconFromDamage(0));
|
// this.setitemIcon(Item.doorWood.getIconFromDamage(0));
|
||||||
this.setCreativeTab(CreativeTabs.tabTransport);
|
this.setCreativeTab(CreativeTabs.tabTransport);
|
||||||
|
|
||||||
}
|
}
|
||||||
public void registerIcons(IconRegister par1IconRegister)
|
public void registerIcons(IconRegister par1IconRegister)
|
||||||
{
|
{
|
||||||
this.itemIcon = par1IconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName().replace("item.", ""));
|
this.itemIcon = par1IconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName().replace("item.", ""));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
|
|
||||||
{
|
|
||||||
|
|
||||||
if(!par3World.isRemote)
|
|
||||||
{
|
|
||||||
System.out.println("Block metadata is "+par3World.getBlockMetadata(par4, par5, par6));
|
|
||||||
System.out.println(par3World.getBiomeGenForCoords(par4, par6).biomeName);
|
|
||||||
|
|
||||||
|
|
||||||
this.onItemRightClick(par1ItemStack, par3World, par2EntityPlayer);
|
public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
|
||||||
|
{
|
||||||
Block block = Block.blocksList[par3World.getBlockId(par4, par5, par6)];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
//System.out.println("Block texture data is "+Block.blocksList[par3World.getBlockId(par4, par5, par6)].getBlockTexture(par3World,par4, par5, par6,par7).getIconName());
|
|
||||||
//System.out.println("Block name is is "+Block.blocksList[par3World.getBlockId(par4, par5, par6)].getUnlocalizedName2());
|
|
||||||
|
|
||||||
return true;
|
if(!par3World.isRemote)
|
||||||
}
|
{
|
||||||
|
System.out.println("Block metadata is "+par3World.getBlockMetadata(par4, par5, par6));
|
||||||
|
System.out.println(par3World.getBiomeGenForCoords(par4, par6).biomeName);
|
||||||
public MovingObjectPosition getMovingObjectPositionFromPlayer(World par1World, EntityPlayer par2EntityPlayer, boolean par3)
|
|
||||||
{
|
|
||||||
float var4 = 1.0F;
|
|
||||||
float var5 = par2EntityPlayer.prevRotationPitch + (par2EntityPlayer.rotationPitch - par2EntityPlayer.prevRotationPitch) * var4;
|
|
||||||
float var6 = par2EntityPlayer.prevRotationYaw + (par2EntityPlayer.rotationYaw - par2EntityPlayer.prevRotationYaw) * var4;
|
|
||||||
double var7 = par2EntityPlayer.prevPosX + (par2EntityPlayer.posX - par2EntityPlayer.prevPosX) * (double)var4;
|
|
||||||
double var9 = par2EntityPlayer.prevPosY + (par2EntityPlayer.posY - par2EntityPlayer.prevPosY) * (double)var4 + 1.62D - (double)par2EntityPlayer.yOffset;
|
|
||||||
double var11 = par2EntityPlayer.prevPosZ + (par2EntityPlayer.posZ - par2EntityPlayer.prevPosZ) * (double)var4;
|
|
||||||
Vec3 var13 = par1World.getWorldVec3Pool().getVecFromPool(var7, var9, var11);
|
|
||||||
float var14 = MathHelper.cos(-var6 * 0.017453292F - (float)Math.PI);
|
|
||||||
float var15 = MathHelper.sin(-var6 * 0.017453292F - (float)Math.PI);
|
|
||||||
float var16 = -MathHelper.cos(-var5 * 0.017453292F);
|
|
||||||
float var17 = MathHelper.sin(-var5 * 0.017453292F);
|
|
||||||
float var18 = var15 * var16;
|
|
||||||
float var20 = var14 * var16;
|
|
||||||
double var21 = 5.0D;
|
|
||||||
if (par2EntityPlayer instanceof EntityPlayerMP)
|
|
||||||
{
|
|
||||||
var21 = 4;
|
|
||||||
}
|
|
||||||
Vec3 var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21);
|
|
||||||
return par1World.rayTraceBlocks_do_do(var13, var23, true, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
if(this.isSteven(par3EntityPlayer))
|
|
||||||
{
|
|
||||||
new Spells(par3EntityPlayer, par1ItemStack.stackSize).cast();
|
|
||||||
//mod_pocketDim.proxy.startCasting(par3EntityPlayer, par1ItemStack.stackSize);
|
|
||||||
|
|
||||||
|
|
||||||
|
this.onItemRightClick(par1ItemStack, par3World, par2EntityPlayer);
|
||||||
|
|
||||||
}
|
Block block = Block.blocksList[par3World.getBlockId(par4, par5, par6)];
|
||||||
Boolean didFindThing=false;
|
|
||||||
MovingObjectPosition hit = this.getMovingObjectPositionFromPlayer(par3EntityPlayer.worldObj, par3EntityPlayer, false );
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
//System.out.println("Block texture data is "+Block.blocksList[par3World.getBlockId(par4, par5, par6)].getBlockTexture(par3World,par4, par5, par6,par7).getIconName());
|
||||||
|
//System.out.println("Block name is is "+Block.blocksList[par3World.getBlockId(par4, par5, par6)].getUnlocalizedName2());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public MovingObjectPosition getMovingObjectPositionFromPlayer(World par1World, EntityPlayer par2EntityPlayer, boolean par3)
|
||||||
|
{
|
||||||
|
float var4 = 1.0F;
|
||||||
|
float var5 = par2EntityPlayer.prevRotationPitch + (par2EntityPlayer.rotationPitch - par2EntityPlayer.prevRotationPitch) * var4;
|
||||||
|
float var6 = par2EntityPlayer.prevRotationYaw + (par2EntityPlayer.rotationYaw - par2EntityPlayer.prevRotationYaw) * var4;
|
||||||
|
double var7 = par2EntityPlayer.prevPosX + (par2EntityPlayer.posX - par2EntityPlayer.prevPosX) * (double)var4;
|
||||||
|
double var9 = par2EntityPlayer.prevPosY + (par2EntityPlayer.posY - par2EntityPlayer.prevPosY) * (double)var4 + 1.62D - (double)par2EntityPlayer.yOffset;
|
||||||
|
double var11 = par2EntityPlayer.prevPosZ + (par2EntityPlayer.posZ - par2EntityPlayer.prevPosZ) * (double)var4;
|
||||||
|
Vec3 var13 = par1World.getWorldVec3Pool().getVecFromPool(var7, var9, var11);
|
||||||
|
float var14 = MathHelper.cos(-var6 * 0.017453292F - (float)Math.PI);
|
||||||
|
float var15 = MathHelper.sin(-var6 * 0.017453292F - (float)Math.PI);
|
||||||
|
float var16 = -MathHelper.cos(-var5 * 0.017453292F);
|
||||||
|
float var17 = MathHelper.sin(-var5 * 0.017453292F);
|
||||||
|
float var18 = var15 * var16;
|
||||||
|
float var20 = var14 * var16;
|
||||||
|
double var21 = 5.0D;
|
||||||
|
if (par2EntityPlayer instanceof EntityPlayerMP)
|
||||||
|
{
|
||||||
|
var21 = 4;
|
||||||
|
}
|
||||||
|
Vec3 var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21);
|
||||||
|
return par1World.rayTraceBlocks_do_do(var13, var23, true, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
|
||||||
|
{
|
||||||
|
if (this.isSteven(par3EntityPlayer))
|
||||||
|
{
|
||||||
|
new Spells(par3EntityPlayer, par1ItemStack.stackSize).cast();
|
||||||
|
//mod_pocketDim.proxy.startCasting(par3EntityPlayer, par1ItemStack.stackSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
Boolean didFindThing=false;
|
||||||
|
MovingObjectPosition hit = this.getMovingObjectPositionFromPlayer(par3EntityPlayer.worldObj, par3EntityPlayer, false );
|
||||||
if(hit!=null&&!par2World.isRemote)
|
if(hit!=null&&!par2World.isRemote)
|
||||||
{
|
{
|
||||||
//if(par2World.getBlockId(hit.blockX, hit.blockY, hit.blockZ)==properties.RiftBlockID)
|
//if(par2World.getBlockId(hit.blockX, hit.blockY, hit.blockZ)==properties.RiftBlockID)
|
||||||
|
@ -113,74 +108,65 @@ public class ItemStableFabric extends Item
|
||||||
LinkData link = dimHelper.instance.getLinkDataFromCoords(hit.blockX, hit.blockY, hit.blockZ, par2World);
|
LinkData link = dimHelper.instance.getLinkDataFromCoords(hit.blockX, hit.blockY, hit.blockZ, par2World);
|
||||||
if(link!=null)
|
if(link!=null)
|
||||||
{
|
{
|
||||||
Block var11;
|
Block var11;
|
||||||
if(par1ItemStack.getItem() instanceof itemExitDoor )
|
if(par1ItemStack.getItem() instanceof itemExitDoor )
|
||||||
{
|
{
|
||||||
var11 = mod_pocketDim.ExitDoor;
|
var11 = mod_pocketDim.ExitDoor;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(par1ItemStack.getItem() instanceof ItemChaosDoor )
|
|
||||||
{
|
|
||||||
var11 = mod_pocketDim.chaosDoor;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var11 = mod_pocketDim.dimDoor;
|
|
||||||
}
|
|
||||||
|
|
||||||
int par4 = hit.blockX;
|
|
||||||
int par5 = hit.blockY-1;
|
|
||||||
int par6 = hit.blockZ;
|
|
||||||
int par7 = 0 ;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (par3EntityPlayer.canPlayerEdit(par4, par5, par6, par7, par1ItemStack) && par3EntityPlayer.canPlayerEdit(par4, par5 + 1, par6, par7, par1ItemStack)&&!par2World.isRemote)
|
else if(par1ItemStack.getItem() instanceof ItemChaosDoor )
|
||||||
{
|
{
|
||||||
int var12 = MathHelper.floor_double((double)((par3EntityPlayer.rotationYaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3;
|
var11 = mod_pocketDim.chaosDoor;
|
||||||
String cardinal= "default";
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var11 = mod_pocketDim.dimDoor;
|
||||||
|
}
|
||||||
|
|
||||||
switch(link.linkOrientation)
|
int par4 = hit.blockX;
|
||||||
{
|
int par5 = hit.blockY-1;
|
||||||
case 0: cardinal = "East";
|
int par6 = hit.blockZ;
|
||||||
break;
|
int par7 = 0 ;
|
||||||
case 1: cardinal = "South";
|
|
||||||
break;
|
|
||||||
case 2: cardinal = "West";
|
|
||||||
break;
|
|
||||||
case 3: cardinal = "North";
|
if (par3EntityPlayer.canPlayerEdit(par4, par5, par6, par7, par1ItemStack) && par3EntityPlayer.canPlayerEdit(par4, par5 + 1, par6, par7, par1ItemStack)&&!par2World.isRemote)
|
||||||
break;
|
{
|
||||||
}
|
int var12 = MathHelper.floor_double((double)((par3EntityPlayer.rotationYaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3;
|
||||||
System.out.println("Link orientation is " + link.linkOrientation + "- "+cardinal);
|
String cardinal= "default";
|
||||||
}
|
|
||||||
|
switch(link.linkOrientation)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
cardinal = "East";
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
cardinal = "South";
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
cardinal = "West";
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
cardinal = "North";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
System.out.println("Link orientation is " + link.linkOrientation + " - " + cardinal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return par1ItemStack;
|
||||||
return par1ItemStack;
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public boolean isSteven(EntityPlayer player)
|
|
||||||
{
|
|
||||||
if(player.username=="stevenrs11"||player.username=="Stevenrs11"||player.username=="StevenRS11")
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public boolean isSteven(EntityPlayer player)
|
||||||
|
{
|
||||||
|
return (player.username.equalsIgnoreCase("stevenrs11"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
|
||||||
}
|
{
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue