Java源码示例:net.minecraft.entity.item.EntityMinecart
示例1
private boolean checkFilter(Entity entity) {
boolean ret = false;
if (this.players.getValue() && entity instanceof EntityPlayer && entity != Minecraft.getMinecraft().player) {
ret = true;
}
if (this.mobs.getValue() && entity instanceof IMob) {
ret = true;
}
if (this.animals.getValue() && entity instanceof IAnimals && !(entity instanceof IMob)) {
ret = true;
}
if (this.vehicles.getValue() && (entity instanceof EntityBoat || entity instanceof EntityMinecart || entity instanceof EntityMinecartContainer)) {
ret = true;
}
if (this.items.getValue() && entity instanceof EntityItem) {
ret = true;
}
return ret;
}
示例2
public void onCartBroken(EntityMinecart cart){
if(!travelingBetweenDimensions) {
if(motorized) {
motorized = false;
cart.dropItem(ModItems.CART_ENGINE, 1);
for(int i = 0; i < fuelInv.getSizeInventory(); i++) {
ItemStack fuel = fuelInv.getStackInSlot(i);
if(fuel != null) cart.entityDropItem(fuel, 0);
}
}
}
if(chunkloading) {
ChunkLoadManager.INSTANCE.unmarkAsChunkLoader(cart);
if(!travelingBetweenDimensions) {
chunkloading = false;
if(!SignalsConfig.disableChunkLoaderUpgrades) cart.dropItem(ModItems.CHUNKLOADER_UPGRADE, 1);
}
}
travelingBetweenDimensions = false;
}
示例3
@Override
public void dismountRidingEntity()
{
Entity entity = this.getRidingEntity();
super.dismountRidingEntity();
// Try to find an air block beside the track to dismount to
if (entity instanceof EntityMinecart)
{
BlockPos pos = new BlockPos(this);
for (BlockPos posTmp : PositionUtils.getAdjacentPositions(pos, EnumFacing.UP, true))
{
if (this.getEntityWorld().isAirBlock(posTmp))
{
this.setPosition(posTmp.getX() + 0.5D, this.posY, posTmp.getZ() + 0.5D);
break;
}
}
}
}
示例4
private void initTrains(){
List<EntityMinecart> carts = new ArrayList<>();
for(World world : DimensionManager.getWorlds()) {
for(Entity entity : world.loadedEntityList) {
if(entity instanceof EntityMinecart) {
carts.add((EntityMinecart)entity);
}
}
}
Set<MCTrain> trains = new NetworkObjectProvider().provideTrains(carts);
state.setTrains(trains);
for(MCTrain train : trains) {
NetworkHandler.sendToAll(new PacketAddOrUpdateTrain(train));
}
}
示例5
@Override
public boolean updatePositions(NetworkState<MCPos> state){
super.updatePositions(state);
Set<EntityMinecart> carts = getCarts();
if(!carts.isEmpty()) { //Update if any cart is loaded, currently.
ImmutableSet.Builder<MCPos> positionBuilder = ImmutableSet.builder();
for(EntityMinecart cart : getCarts()) {
MCPos cartPos = new MCPos(cart.world, cart.getPosition().down());
if(railNetworkManager.getNetwork().railObjects.get(cartPos) == null) {
cartPos = new MCPos(cart.world, cart.getPosition());
}
positionBuilder.add(cartPos);
}
ImmutableSet<MCPos> positions = positionBuilder.build();
return setPositions(railNetworkManager.getNetwork(), state, positions);
} else {
return false;
}
}
示例6
/**
* Spawns a new cart entity using the provided item.
* <p/>
* The backing item must implement <code>IMinecartItem</code> and/or extend
* <code>ItemMinecart</code>.
* <p/>
* Generally Forge requires all cart items to extend ItemMinecart.
*
* @param owner The player name that should used as the owner
* @param cart An ItemStack containing a cart item, will not be changed by
* the function
* @param world The World object
* @param x x-Coord
* @param y y-Coord
* @param z z-Coord
* @return the cart placed or null if failed
* @see IMinecartItem, ItemMinecart
*/
public static EntityMinecart placeCart(GameProfile owner, ItemStack cart, WorldServer world, int x, int y, int z) {
if (cart == null)
return null;
cart = cart.copy();
if (cart.getItem() instanceof IMinecartItem) {
IMinecartItem mi = (IMinecartItem) cart.getItem();
return mi.placeCart(owner, cart, world, x, y, z);
} else if (cart.getItem() instanceof ItemMinecart)
try {
boolean placed = cart.getItem().onItemUse(cart, FakePlayerFactory.get(world, railcraftProfile), world, x, y, z
, 0, 0, 0, 0);
if (placed) {
List<EntityMinecart> carts = getMinecartsAt(world, x, y, z, 0.3f);
if (carts.size() > 0) {
setCartOwner(carts.get(0), owner);
return carts.get(0);
}
}
} catch (Exception e) {
return null;
}
return null;
}
示例7
@Override
public void onMinecartPass(World world, EntityMinecart cart, BlockPos pos){
super.onMinecartPass(world, cart, pos);
if(!world.isRemote) {
TileEntityTeleportRail te = (TileEntityTeleportRail)world.getTileEntity(pos);
MCPos telDestination = te.getLinkedPosition();
if(telDestination != null) { //We can only teleport if we have a destination to go to.
spawnParticle(cart);
MCTrain train = RailNetworkManager.getServerInstance().getState().getTrain(cart.getUniqueID());
if(train != null) { //Should always be true
if(train.getCarts().size() == train.cartIDs.size()) { //We can only teleport if all carts are loaded.
//Check if all carts are on adjacent teleport tracks
Set<MCPos> teleportRails = getNeighboringTeleportRails(world, pos);
for(MCPos cartPos : train.getPositions()) {
if(!teleportRails.contains(cartPos)) {
return; //When not all carts are on adjacent teleport tracks, don't teleport.
}
}
teleport(new HashSet<>(train.getCarts()), telDestination);
}
}
}
}
}
示例8
public GlassesMessage(PacketUpdateMessage packet, World world){
associatedRouter = packet.pos;
Entity cart = world.getEntityByID(packet.entityId);
associatedCart = cart instanceof EntityMinecart ? (EntityMinecart)cart : null;
String message = packet.message;
message = I18n.format(message);
message = message.replaceAll("\\$ROUTER\\$", String.format("(%s, %s, %s)", associatedRouter.getX(), associatedRouter.getY(), associatedRouter.getZ()));
if(associatedCart != null) {
BlockPos cartPos = associatedCart.getPosition();
message = message.replaceAll("\\$CART\\$", String.format("(%s at (%s, %s, %s)", associatedCart.getName(), cartPos.getX(), cartPos.getY(), cartPos.getZ()));
} else {
//Log.warn("Cart is null!");
}
//Format the args
for(int i = 0; i < packet.args.length; i++) {
if(packet.args[i].startsWith("signals.")) {
packet.args[i] = I18n.format(packet.args[i]);
}
}
localizedMessage = String.format(message, (Object[])packet.args);
}
示例9
/**
* Must be called once per tick while on tracks by the owning object.
* Server side only.
* <p>
* <blockquote><pre>
* {@code
* public void onEntityUpdate()
* {
* super.onEntityUpdate();
* if (!world.isRemote)
* chargeHandler.tick();
* }
* }
* </pre></blockquote>
*/
public void tick() {
clock++;
removeLosses();
draw = (draw * 49.0 + lastTickDraw) / 50.0;
lastTickDraw = 0.0;
if (drewFromTrack > 0)
drewFromTrack--;
else if (type == Type.USER && charge < (capacity / 2.0) && clock % DRAW_INTERVAL == 0) {
ILinkageManager lm = CartTools.getLinkageManager(minecart.worldObj);
for (EntityMinecart cart : lm.getCartsInTrain(minecart)) {
if (cart instanceof IElectricMinecart) {
ChargeHandler ch = ((IElectricMinecart) cart).getChargeHandler();
if (ch.getType() != Type.USER && ch.getCharge() > 0) {
charge += ch.removeCharge(capacity - charge);
break;
}
}
}
}
}
示例10
/**
* Checks to see if a cart is being held by a ITrackLockdown.
*
* @param cart The cart to check
* @return True if being held
*/
public static boolean isCartLockedDown(EntityMinecart cart) {
int x = MathHelper.floor_double(cart.posX);
int y = MathHelper.floor_double(cart.posY);
int z = MathHelper.floor_double(cart.posZ);
if (BlockRailBase.func_150049_b_(cart.worldObj, x, y - 1, z))
y--;
TileEntity tile = cart.worldObj.getTileEntity(x, y, z);
if (tile instanceof ITrackTile) {
ITrackInstance track = ((ITrackTile) tile).getTrackInstance();
return track instanceof ITrackLockdown && ((ITrackLockdown) track).isCartLockedDown(cart);
} else if (tile instanceof ITrackLockdown)
return ((ITrackLockdown) tile).isCartLockedDown(cart);
return false;
}
示例11
private int getColor(Entity entity) {
int ret = -1;
if (entity instanceof IAnimals && !(entity instanceof IMob)) {
ret = 0xFF00FF44;
}
if (entity instanceof IMob) {
ret = 0xFFFFAA00;
}
if (entity instanceof EntityBoat || entity instanceof EntityMinecart || entity instanceof EntityMinecartContainer) {
ret = 0xFF00FFAA;
}
if (entity instanceof EntityItem) {
ret = 0xFF00FFAA;
}
if (entity instanceof EntityPlayer) {
ret = 0xFFFF4444;
if (Seppuku.INSTANCE.getFriendManager().isFriend(entity) != null) {
ret = 0xFF9900EE;
}
}
return ret;
}
示例12
@Override
public boolean isCartApplicable(TileEntity te, EntityMinecart cart, Pattern destinationRegex){
IItemHandler cap = cart.getCapability(ITEM_HANDLER, null);
if(cap != null && destinationRegex.matcher("ITEM").matches()) {
IInventory inv = (IInventory)te;
for(int cartSlot = 0; cartSlot < cap.getSlots(); cartSlot++) {
ItemStack cartStack = cap.getStackInSlot(cartSlot);
if(!cartStack.isEmpty()) {
if(isStackApplicable(cartStack, inv)) return true;
}
}
}
return false;
}
示例13
/**
* @param world
* @param i
* @param j
* @param k
* @param sensitivity Controls the size of the search box, ranges from
* (-inf, 0.49].
* @return
*/
public static List<EntityMinecart> getMinecartsAt(World world, int i, int j, int k, float sensitivity) {
sensitivity = Math.min(sensitivity, 0.49f);
List entities = world.getEntitiesWithinAABB(EntityMinecart.class, AxisAlignedBB.getBoundingBox(i + sensitivity, j + sensitivity, k + sensitivity, i + 1 - sensitivity, j + 1 - sensitivity, k + 1 - sensitivity));
List<EntityMinecart> carts = new ArrayList<EntityMinecart>();
for (Object o : entities) {
EntityMinecart cart = (EntityMinecart) o;
if (!cart.isDead)
carts.add((EntityMinecart) o);
}
return carts;
}
示例14
@Override
public RailRoute<MCPos> pathfind(MCPos start, EnumHeading dir){
RailRoute<MCPos> path = null;
for(EntityMinecart cart : getCarts()) {
path = pathfind(cart, start, dir);
if(path != null) break;
}
return path;
}
示例15
public void onMinecartJoinedWorld(EntityMinecart cart){
MCTrain train = getTrain(cart.getUniqueID());
//Override any previous records, automatically resolving dimension changes of entities, where the entity in the next dimension
//is added, before the entity in the previous dimension is noticed to be removed.
EntityMinecart oldCart = trackingMinecarts.put(cart.getUniqueID(), cart);
if(oldCart != null && train != null) train.onCartRemoved(oldCart);
if(train == null) { //If the added cart does not belong to a train yet
addTrain(ImmutableSet.of(cart.getUniqueID()));
} else {
train.onCartAdded(cart);
}
}
示例16
public void onChunkUnload(Chunk chunk){
for(ClassInheritanceMultiMap<Entity> entities : chunk.getEntityLists()) {
for(EntityMinecart cart : entities.getByClass(EntityMinecart.class)) {
removeCart(cart);
}
}
}
示例17
private void removeDeadMinecarts(){
Iterator<EntityMinecart> iterator = trackingMinecarts.values().iterator();
while(iterator.hasNext()) {
EntityMinecart cart = iterator.next();
if(cart.isDead) {
iterator.remove();
onCartKilled(cart);
}
}
}
示例18
private void addToGroup(List<List<EntityMinecart>> cartGroups, EntityMinecart cart){
for(List<EntityMinecart> group : cartGroups) {
if(RailManager.getInstance().areLinked(cart, group.get(0))) {
group.add(cart);
return;
}
}
List<EntityMinecart> newGroup = new ArrayList<>();
newGroup.add(cart);
cartGroups.add(newGroup);
}
示例19
private MCTrain getMatchingTrain(List<MCTrain> trains, EntityMinecart cart){
for(MCTrain train : trains) {
if(!train.getCarts().isEmpty() && RailManager.getInstance().areLinked(train.getCarts().iterator().next(), cart)) {
return train;
}
}
return null;
}
示例20
private void spawnParticle(EntityMinecart cart){
Random rand = cart.world.rand;
float maxSpeed = 1;
float f = (rand.nextFloat() - 0.5F) * maxSpeed;
float f1 = (rand.nextFloat() - 0.5F) * maxSpeed;
float f2 = (rand.nextFloat() - 0.5F) * maxSpeed;
NetworkHandler.sendToAllAround(new PacketSpawnParticle(EnumParticleTypes.PORTAL, cart.posX, cart.posY, cart.posZ, f, f1, f2), cart.world);
}
示例21
public static <T extends EntityMinecart> T getMinecartOnSide(World world, int i, int j, int k, float sensitivity, ForgeDirection side, Class<T> type, boolean subclass) {
for (EntityMinecart cart : getMinecartsOnSide(world, i, j, k, sensitivity, side)) {
if (type == null || (subclass && type.isInstance(cart)) || cart.getClass() == type)
return (T) cart;
}
return null;
}
示例22
@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z){
TileEntity te = y >= 0 ? world.getTileEntity(new BlockPos(x, y, z)) : null;
Entity entity = y == -1 ? world.getEntityByID(x) : null;
switch(EnumGuiId.values()[ID]){
case STATION_MARKER:
return new GuiStationMarker((TileEntityStationMarker)te);
case MINECART_DESTINATION:
return new GuiMinecart(player.inventory, (EntityMinecart)entity, z == 1);
case NETWORK_CONTROLLER:
return new GuiNetworkController();
case SELECT_DESTINATION_PROVIDER:
return new GuiSelectDestinationProvider(te);
case ITEM_HANDLER_DESTINATION:
return new GuiItemHandlerDestination(te);
case CART_HOPPER:
return new GuiCartHopper((TileEntityCartHopper)te);
case RAIL_LINK:
return new GuiRailLink((TileEntityRailLink)te);
case TICKET_DESTINATION:
ItemStack stack = player.getHeldItemMainhand();
CapabilityMinecartDestination accessor = stack.getCapability(CapabilityMinecartDestination.INSTANCE, null);
if(accessor == null) return null;
ItemTicket.readNBTIntoCap(stack);
return new GuiTicket(new Container(){
@Override
public boolean canInteractWith(EntityPlayer playerIn){
return true;
}
}, accessor, stack.getDisplayName());
default:
throw new IllegalStateException("No Gui for gui id: " + ID);
}
}
示例23
@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z){
TileEntity te = y >= 0 ? world.getTileEntity(new BlockPos(x, y, z)) : null;
Entity entity = y == -1 ? world.getEntityByID(x) : null;
switch(EnumGuiId.values()[ID]){
case RAIL_LINK:
case STATION_MARKER:
case CART_HOPPER:
return new ContainerBase<>(te);
case MINECART_DESTINATION:
return new ContainerMinecart(player.inventory, (EntityMinecart)entity, z == 1);
case NETWORK_CONTROLLER:
return new ContainerNetworkController();
case SELECT_DESTINATION_PROVIDER:
return new ContainerSelectDestinationProvider(te);
case ITEM_HANDLER_DESTINATION:
return new ContainerItemHandlerDestination(te);
case TICKET_DESTINATION:
return new Container(){
@Override
public boolean canInteractWith(EntityPlayer playerIn){
return true;
}
};
default:
throw new IllegalStateException("No Container for gui id: " + ID);
}
}
示例24
public ContainerMinecart(InventoryPlayer playerInv, EntityMinecart cart, boolean isMotorized){
super(null);
this.cart = cart;
this.isMotorized = isMotorized;
CapabilityMinecartDestination cap = cart.getCapability(CapabilityMinecartDestination.INSTANCE, null);
addSyncedFields(cap);
if(isMotorized){
IInventory inv = cap.getFuelInv();
for(int i = 0; i < inv.getSizeInventory(); i++){
addSlotToContainer(new SlotInventoryLimiting(inv, i, 18 * i + 164, 70));
}
addPlayerSlots(playerInv, 128, 120);
}
}
示例25
public static List<EntityMinecart> getMinecartsIn(World world, int i1, int j1, int k1, int i2, int j2, int k2) {
List entities = world.getEntitiesWithinAABB(EntityMinecart.class, AxisAlignedBB.getBoundingBox(i1, j1, k1, i2, j2, k2));
List<EntityMinecart> carts = new ArrayList<EntityMinecart>();
for (Object o : entities) {
EntityMinecart cart = (EntityMinecart) o;
if (!cart.isDead)
carts.add((EntityMinecart) o);
}
return carts;
}
示例26
public static boolean isBlacklisted(EntityMinecart cart, String[] config){
if(config.length == 0) return false;
EntityEntry entry = EntityRegistry.getEntry(cart.getClass());
ResourceLocation cartID = ForgeRegistries.ENTITIES.getKey(entry);
for(String blacklist : config) {
if(cartID.equals(new ResourceLocation(blacklist))) {
return true;
}
}
return false;
}
示例27
public static boolean isMinecartAt(World world, int i, int j, int k, float sensitivity, Class<? extends EntityMinecart> type, boolean subclass) {
List<EntityMinecart> list = getMinecartsAt(world, i, j, k, sensitivity);
if (type == null)
return !list.isEmpty();
else
for (EntityMinecart cart : list) {
if ((subclass && type.isInstance(cart)) || cart.getClass() == type)
return true;
}
return false;
}
示例28
private static boolean isEntityValidForName(String filter, Entity entity) throws IllegalArgumentException{
if(filter.equals("")) {
return true;
} else if(filter.startsWith("@")) {//entity type selection
filter = filter.substring(1); //cut off the '@'.
Class typeClass = null;
if(filter.equals("mob")) {
typeClass = EntityMob.class;
} else if(filter.equals("animal")) {
typeClass = EntityAnimal.class;
} else if(filter.equals("living")) {
typeClass = EntityLivingBase.class;
} else if(filter.equals("player")) {
typeClass = EntityPlayer.class;
} else if(filter.equals("item")) {
typeClass = EntityItem.class;
} else if(filter.equals("minecart")) {
typeClass = EntityMinecart.class;
} else if(filter.equals("drone")) {
typeClass = EntityDrone.class;
}
if(typeClass != null) {
return typeClass.isAssignableFrom(entity.getClass());
} else {
throw new IllegalArgumentException(filter + " is not a valid entity type.");
}
} else {
try {
String regex = filter.toLowerCase().replaceAll(".", "[$0]").replace("[*]", ".*");//Wildcard regex
return entity.getCommandSenderName().toLowerCase().matches(regex);//TODO when player, check if entity is tamed by the player (see EntityAIAvoidEntity for example)
} catch(PatternSyntaxException e) {
return entity.getCommandSenderName().toLowerCase().equals(filter.toLowerCase());
}
}
}
示例29
@Override
public void update(){
if(!getWorld().isRemote) {
if(firstTick) {
firstTick = false;
updateCartAbove();
}
if(managingCartId != null) {
List<EntityMinecart> carts = getWorld().getEntities(EntityMinecart.class, input -> input.getPersistentID().equals(managingCartId));
managingCart = carts.isEmpty() ? null : carts.get(0);
managingCartId = null;
}
updateManagingCart(new AxisAlignedBB(extract ? getPos().up() : getPos().down()));
boolean shouldPush;
if(managingCart != null) {
if(isDisabled()) {
shouldPush = true;
} else {
shouldPush = tryTransfer(extract);
}
} else {
shouldPush = false;
}
if(shouldPush && !pushedLastTick) pushCart();
boolean notifyNeighbors = shouldPush != pushedLastTick;
pushedLastTick = shouldPush;
if(notifyNeighbors) {
getWorld().notifyNeighborsOfStateChange(getPos(), getBlockType(), true);
}
int comparatorInputOverride = getComparatorInputOverride();
if(lastComparatorInputOverride != comparatorInputOverride) {
world.updateComparatorOutputLevel(pos, ModBlocks.CART_HOPPER);
lastComparatorInputOverride = comparatorInputOverride;
}
}
}
示例30
private void updateManagingCart(AxisAlignedBB aabb){
if(managingCart != null) {
if(managingCart.isDead || !managingCart.getEntityBoundingBox().intersects(aabb)) {
managingCart = null;
}
}
if(managingCart == null) {
List<EntityMinecart> carts = getWorld().getEntitiesWithinAABB(EntityMinecart.class, aabb);
if(!carts.isEmpty()) {
managingCart = carts.get(0);
pushDir = managingCart.getAdjustedHorizontalFacing();
}
}
}