Java 类net.minecraft.block.BlockRailBase.EnumRailDirection 实例源码
项目:Signals
文件:RailWrapper.java
public Map<EnumFacing, TileEntitySignalBase> getSignals(){
if(signals == null) {
EnumRailDirection railDir = rail.getDirection(world, this, state);
if(isStraightTrack(railDir) && getNeighbors().size() <= 2) {
for(EnumFacing d : getDirections(railDir)) {
d = d.rotateY(); //Check for signals perpendicular to the rail direction
TileEntity te = world.getTileEntity(offset(d));
if(te instanceof TileEntitySignalBase) {
TileEntitySignalBase signal = (TileEntitySignalBase)te;
if(signal.getNeighborPos().equals(this)) {
if(signals == null) signals = new HashMap<>(1); //Be conservative with instantiating, as not many rails usually have a signal.
signals.put(d, signal);
}
}
}
}
if(signals == null) signals = Collections.emptyMap();
}
return signals;
}
项目:Signals
文件:RailWrapper.java
private Map<EnumFacing, Map<RailWrapper, EnumFacing>> calculateExitsForEntries(EnumSet<EnumRailDirection> validRailDirs){
Map<EnumFacing, Map<RailWrapper, EnumFacing>> exitsForEntries = new HashMap<>();
//Evaluate every neighbor dir
for(EnumFacing entry : allNeighbors.values()) {
Map<RailWrapper, EnumFacing> exitsForEntry = new HashMap<>(6);
exitsForEntries.put(entry.getOpposite(), exitsForEntry);
//Check if that neighbor dir is part of a EnumRailDir, if so it's a valid entry/exit path
for(EnumRailDirection railDir : validRailDirs) {
EnumSet<EnumFacing> railDirDirs = getDirections(railDir);
if(railDirDirs.contains(entry)) {
//If found, put all the rail dir entries in the result set
for(Map.Entry<RailWrapper, EnumFacing> neighbor : allNeighbors.entrySet()) {
if(neighbor.getValue() == EnumFacing.DOWN || railDirDirs.contains(neighbor.getValue())) {
exitsForEntry.put(neighbor.getKey(), neighbor.getValue());
}
}
}
}
}
return exitsForEntries;
}
项目:Signals
文件:RailWrapper.java
private static EnumSet<EnumFacing> getDirections(EnumRailDirection railDir){
switch(railDir){
case NORTH_SOUTH:
case ASCENDING_NORTH:
case ASCENDING_SOUTH:
return EnumSet.of(EnumFacing.NORTH, EnumFacing.SOUTH);
case EAST_WEST:
case ASCENDING_EAST:
case ASCENDING_WEST:
return EnumSet.of(EnumFacing.EAST, EnumFacing.WEST);
case SOUTH_EAST:
return EnumSet.of(EnumFacing.SOUTH, EnumFacing.EAST);
case SOUTH_WEST:
return EnumSet.of(EnumFacing.SOUTH, EnumFacing.WEST);
case NORTH_WEST:
return EnumSet.of(EnumFacing.NORTH, EnumFacing.WEST);
case NORTH_EAST:
return EnumSet.of(EnumFacing.NORTH, EnumFacing.EAST);
default:
return EnumSet.noneOf(EnumFacing.class);
}
}
项目:Signals
文件:RailWrapper.java
/**
* All the neighbors of this rail, used in determining which rails are part of a block.
* For junction rails this would include all north, south east and west.
* @return
*/
public Map<RailWrapper, EnumFacing> getNeighbors(){
if(allNeighbors == null) {
EnumSet<EnumRailDirection> validRailDirs = rail.getValidDirections(world, this, state);
this.allNeighbors = calculateAllNeighbors(validRailDirs);
this.exitsForEntries = calculateExitsForEntries(validRailDirs);
}
return allNeighbors;
}
项目:Signals
文件:RailWrapper.java
private static int getHeightOffset(EnumRailDirection railDir, EnumFacing dir){
switch(railDir){
case ASCENDING_EAST:
return dir == EnumFacing.EAST ? 1 : 0;
case ASCENDING_WEST:
return dir == EnumFacing.WEST ? 1 : 0;
case ASCENDING_NORTH:
return dir == EnumFacing.NORTH ? 1 : 0;
case ASCENDING_SOUTH:
return dir == EnumFacing.SOUTH ? 1 : 0;
default:
return 0;
}
}
项目:Signals
文件:RailWrapper.java
private static boolean isStraightTrack(EnumRailDirection railDir){
switch(railDir){
case NORTH_SOUTH:
case ASCENDING_NORTH:
case ASCENDING_SOUTH:
case EAST_WEST:
case ASCENDING_EAST:
case ASCENDING_WEST:
return true;
default:
return false;
}
}
项目:Signals
文件:RailReplacerEventHandler.java
/**
* Makes it so when a player right clicks a rail block with a different rail item, it will be replaced, without having to remove and place a rail.
* @param e
*/
@SubscribeEvent
public void onBlockInteraction(RightClickBlock e){
if(!e.getWorld().isRemote && e.getFace() == EnumFacing.UP) {
ItemStack stack = e.getEntityPlayer().getHeldItemMainhand();
BlockRailBase railBlock = getRailBlock(stack);
if(railBlock != null) {
IBlockState state = e.getWorld().getBlockState(e.getPos());
IRail rail = RailManager.getInstance().getRail(e.getWorld(), e.getPos(), state);
if(rail != null && state.getBlock() != railBlock) {
EnumRailDirection dir = rail.getDirection(e.getWorld(), e.getPos(), state);
e.getWorld().destroyBlock(e.getPos(), !e.getEntityPlayer().isCreative());
List<EntityItem> drops = e.getWorld().getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(e.getPos()));
for(EntityItem drop : drops) {
drop.setPickupDelay(0);
drop.onCollideWithPlayer(e.getEntityPlayer());
}
e.getWorld().setBlockState(e.getPos(), railBlock.getDefaultState());
if(!e.getEntityPlayer().isCreative()) stack.shrink(1);
//Set the rail orientation equal to the old rail, if possible.
if(railBlock.getShapeProperty().getAllowedValues().contains(dir)) {
IBlockState curState = e.getWorld().getBlockState(e.getPos());
e.getWorld().setBlockState(e.getPos(), curState.withProperty(railBlock.getShapeProperty(), dir));
}
}
}
}
}
项目:Signals
文件:TileEntitySignalBase.java
protected void updateSwitches(AStarRailNode pathNode, EntityMinecart cart, boolean submitMessages){
List<PacketUpdateMessage> messages = new ArrayList<>();
EnumFacing lastHeading = pathNode.getPathDir();
while(pathNode != null) {
Map<RailWrapper, EnumFacing> neighbors = pathNode.getRail().getNeighborsForEntryDir(lastHeading);
EnumFacing heading = pathNode.getNextNode() != null ? neighbors.get(pathNode.getNextNode().getRail()) : null;
if(neighbors.size() > 2 && heading != null && lastHeading != null) { //If on an intersection
EnumRailDirection railDir = RailWrapper.getRailDir(EnumSet.of(heading, lastHeading.getOpposite()));
String[] args = {Integer.toString(pathNode.getRail().getX()), Integer.toString(pathNode.getRail().getY()), Integer.toString(pathNode.getRail().getZ()), "signals.dir." + lastHeading.toString().toLowerCase(), "signals.dir." + heading.toString().toLowerCase()};
if(pathNode.getRail().setRailDir(railDir)) {
messages.add(new PacketUpdateMessage(this, cart, "signals.message.changing_junction", args));
} else {
messages.add(new PacketUpdateMessage(this, cart, "signals.message.changing_junction", args));
}
}
lastHeading = heading;
pathNode = pathNode.getNextNode();
if(pathNode != null && heading != null && getNeighborSignal(pathNode.getRail(), heading.getOpposite()) != null) {
break;
}
}
if(submitMessages) {
for(PacketUpdateMessage message : messages) {
NetworkHandler.sendToAllAround(message, getWorld());
}
}
}
项目:Cyclic
文件:BehaviorMinecartDropItem.java
public EnumFacing getFacing(IBlockState state) {
if (state.getBlock() == Blocks.ACTIVATOR_RAIL) {
EnumRailDirection dir = state.getValue(BlockRailPowered.SHAPE);
switch (dir) {
case ASCENDING_EAST:
return EnumFacing.EAST;
case ASCENDING_NORTH:
return EnumFacing.NORTH;
case ASCENDING_SOUTH:
return EnumFacing.SOUTH;
case ASCENDING_WEST:
return EnumFacing.WEST;
case EAST_WEST:
return EnumFacing.NORTH;
case NORTH_EAST:
return EnumFacing.SOUTH;
case NORTH_SOUTH:
return EnumFacing.WEST;
case NORTH_WEST:
return EnumFacing.EAST;
case SOUTH_EAST:
return EnumFacing.NORTH;
case SOUTH_WEST:
return EnumFacing.EAST;
default:
break;
}
}
return EnumFacing.NORTH;
}
项目:Signals
文件:RailBase.java
@Override
public EnumRailDirection getDirection(World world, BlockPos pos, IBlockState state){
return state.getValue(((BlockRailBase)state.getBlock()).getShapeProperty());
}
项目:Signals
文件:RailBase.java
@Override
public EnumSet<EnumRailDirection> getValidDirections(World world, BlockPos pos, IBlockState state){
return EnumSet.copyOf(((BlockRailBase)state.getBlock()).getShapeProperty().getAllowedValues());
}
项目:Signals
文件:RailBase.java
@Override
public void setDirection(World world, BlockPos pos, IBlockState originalState, EnumRailDirection railDir){
world.setBlockState(pos, originalState.withProperty(((BlockRailBase)originalState.getBlock()).getShapeProperty(), railDir), 2);
}
项目:Signals
文件:RailWrapper.java
public boolean setRailDir(EnumRailDirection railDir){
boolean valid = rail.getValidDirections(world, this, state).contains(railDir);
if(valid) rail.setDirection(world, this, state, railDir);
return valid;
}
项目:Signals
文件:RailWrapper.java
public static EnumRailDirection getRailDir(EnumSet<EnumFacing> facings){
return DIRS_TO_RAIL_DIR.get(facings);
}
项目:MoarCarts
文件:Predicates.java
public boolean apply(EnumRailDirection direction)
{
return direction == EnumRailDirection.NORTH_SOUTH || direction == EnumRailDirection.EAST_WEST;
}
项目:Signals
文件:IRail.java
/**
* Should return the current rail orientation, for the given position and state.
* @param world
* @param pos
* @param state
* @return
*/
public EnumRailDirection getDirection(World world, BlockPos pos, IBlockState state);
项目:Signals
文件:IRail.java
/**
* The valid directions this rail can be _set_ to. Any element returned here should be allowed to be passed in setDirection
* @param world
* @param pos
* @param state
* @return
*/
public EnumSet<EnumRailDirection> getValidDirections(World world, BlockPos pos, IBlockState state);
项目:Signals
文件:IRail.java
/**
* Should set the rail to the given railDir.
* @param world
* @param pos
* @param originalState
* @param railDir
*/
public void setDirection(World world, BlockPos pos, IBlockState originalState, EnumRailDirection railDir);