当前位置: 首页>>代码示例>>Golang>>正文


Golang gamerules.Slot类代码示例

本文整理汇总了Golang中chunkymonkey/gamerules.Slot的典型用法代码示例。如果您正苦于以下问题:Golang Slot类的具体用法?Golang Slot怎么用?Golang Slot使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了Slot类的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。

示例1: reqPlaceItem

// placeBlock attempts to place a block. This is called by PlayerBlockInteract
// in the situation where the player interacts with an attachable block
// (potentially in a different chunk to the one where the block gets placed).
func (chunk *Chunk) reqPlaceItem(player gamerules.IPlayerClient, target *BlockXyz, slot *gamerules.Slot) {
	// TODO defer a check for remaining items in slot, and do something with them
	// (send to player or drop on the ground).

	// TODO more flexible item checking for block placement (e.g placing seed
	// items on farmland doesn't fit this current simplistic model). The block
	// type for the block being placed against should probably contain this logic
	// (i.e farmland block should know about the seed item).
	heldBlockType, ok := slot.ItemTypeId.ToBlockId()
	if !ok || slot.Count < 1 {
		// Not a placeable item.
		return
	}

	index, subLoc, ok := chunk.getBlockIndexByBlockXyz(target)
	if !ok {
		return
	}

	// Blocks can only replace certain blocks.
	blockTypeId := index.BlockId(chunk.blocks)
	blockType, ok := gamerules.Blocks.Get(blockTypeId)
	if !ok || !blockType.Replaceable {
		return
	}

	// Safe to replace block.
	chunk.setBlock(target, subLoc, index, heldBlockType, byte(slot.Data))

	slot.Decrement()
}
开发者ID:nictuku,项目名称:chunkymonkey,代码行数:34,代码来源:chunk.go

示例2: PacketPlayerBlockHit

func (player *Player) PacketPlayerBlockHit(status DigStatus, target *BlockXyz, face Face) {
	player.lock.Lock()
	defer player.lock.Unlock()

	// This packet handles 'throwing' an item as well, with status = 4, and
	// the zero values for target and face, so check for that.
	if status == DigDropItem && target.IsZero() && face == 0 {
		blockLoc := player.position.ToBlockXyz()
		shardClient, _, ok := player.chunkSubs.ShardClientForBlockXyz(blockLoc)
		if !ok {
			return
		}

		var itemToThrow gamerules.Slot
		player.inventory.TakeOneHeldItem(&itemToThrow)
		if !itemToThrow.IsEmpty() {
			velocity := physics.VelocityFromLook(player.look, 0.50)
			position := player.position
			position.Y += player.height
			shardClient.ReqDropItem(itemToThrow, position, velocity, TicksPerSecond/2)
		}
		return
	}

	// Validate that the player is actually somewhere near the block.
	targetAbsPos := target.MidPointToAbsXyz()
	if !targetAbsPos.IsWithinDistanceOf(&player.position, MaxInteractDistance) {
		log.Printf("Player/PacketPlayerBlockHit: ignoring player dig at %v (too far away)", target)
		return
	}

	// TODO measure the dig time on the target block and relay to the shard to
	// stop speed hacking (based on block type and tool used - non-trivial).

	shardClient, _, ok := player.chunkSubs.ShardClientForBlockXyz(target)
	if ok {
		held, _ := player.inventory.HeldItem()
		shardClient.ReqHitBlock(held, *target, status, face)
	}
}
开发者ID:compbrain,项目名称:chunkymonkey,代码行数:40,代码来源:player.go

示例3: SlotUpdate

// Implementing IInventorySubscriber - relays inventory changes to the viewer
// of the window.
func (iv *inventoryView) SlotUpdate(slot *gamerules.Slot, slotId SlotId) {
	buf := new(bytes.Buffer)
	slot.SendUpdate(buf, iv.window.windowId, iv.startSlot+slotId)
	iv.window.viewer.TransmitPacket(buf.Bytes())
}
开发者ID:compbrain,项目名称:chunkymonkey,代码行数:7,代码来源:window.go


注:本文中的chunkymonkey/gamerules.Slot类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。