up3
Build and deploy / Build (push) Has been cancelled
Build and deploy / Update Contributors (push) Has been cancelled
Build and deploy / Deploy (push) Has been cancelled
Build and deploy / Build (push) Has been cancelled
Build and deploy / Update Contributors (push) Has been cancelled
Build and deploy / Deploy (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
package block
|
||||
|
||||
import (
|
||||
"github.com/df-mc/dragonfly/server/block/cube"
|
||||
"github.com/df-mc/dragonfly/server/item"
|
||||
"github.com/df-mc/dragonfly/server/world"
|
||||
)
|
||||
|
||||
// Cobweb is a non-solid block that drastically slows entities passing through it. It is broken
|
||||
// quickly with a sword or shears and drops string when broken without silk touch.
|
||||
type Cobweb struct {
|
||||
empty
|
||||
transparent
|
||||
}
|
||||
|
||||
// Cobweb is implemented because the item package needs to identify this block but cannot implement the block package.
|
||||
func (Cobweb) Cobweb() {}
|
||||
|
||||
// EntityInside slows the entity's velocity and resets its fall distance while it is inside the cobweb.
|
||||
func (Cobweb) EntityInside(_ cube.Pos, _ *world.Tx, e world.Entity) {
|
||||
if fallEntity, ok := e.(fallDistanceEntity); ok {
|
||||
fallEntity.ResetFallDistance()
|
||||
}
|
||||
if v, ok := e.(velocityEntity); ok {
|
||||
vel := v.Velocity()
|
||||
vel[0] *= 0.25
|
||||
vel[1] *= 0.05
|
||||
vel[2] *= 0.25
|
||||
v.SetVelocity(vel)
|
||||
}
|
||||
}
|
||||
|
||||
// BreakInfo ...
|
||||
func (c Cobweb) BreakInfo() BreakInfo {
|
||||
return newBreakInfo(
|
||||
4,
|
||||
alwaysHarvestable,
|
||||
func(t item.Tool) bool {
|
||||
return swordEffective(t) || shearsEffective(t)
|
||||
},
|
||||
func(t item.Tool, enchantments []item.Enchantment) []item.Stack {
|
||||
if t.ToolType() == item.TypeShears {
|
||||
return oneOf(c)(t, enchantments)
|
||||
}
|
||||
if t.ToolType() == item.TypeSword {
|
||||
return oneOf(String{})(t, enchantments)
|
||||
}
|
||||
return nil
|
||||
},
|
||||
).withBlastResistance(4)
|
||||
}
|
||||
|
||||
// HasLiquidDrops ...
|
||||
func (Cobweb) HasLiquidDrops() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// EncodeItem ...
|
||||
func (Cobweb) EncodeItem() (name string, meta int16) {
|
||||
return "minecraft:web", 0
|
||||
}
|
||||
|
||||
// EncodeBlock ...
|
||||
func (Cobweb) EncodeBlock() (string, map[string]any) {
|
||||
return "minecraft:web", nil
|
||||
}
|
||||
Reference in New Issue
Block a user