Right clicking summons a box of obsidian around you, giving you speed, strength and damage resistance during the duration. Hitting has a chance to drain enemies health
← Back to main
api.giveItem(myId, "Diamond Hoe", 1, {
customDisplayName: "Hades Scythe"
});
//Timeout Code by Sulfrox
class MinQueue{constructor(i,t,e){t=e=Uint32Array,this.c=i,this.k=new t(i+1),this.p=new e(i+1),this.h=!1,this.l=0}bbu(i){let t=this.k,e=this.p,r=t[i],h=e[i];for(;i>1;){let s=i>>>1;if(e[s]<=h)break;t[i]=t[s],e[i]=e[s],i=s}t[i]=r,e[i]=h}bbd(i){let t=this.k,e=this.p,r=t[i],h=e[i],s=1+(this.l>>>1),u=this.l+1;for(;i<s;){let n=i<<1,l=e[n],m=t[n],_=n,p=n+1;if(p<u&&e[p]<l&&(l=e[p],m=t[p],_=p),l>=h)break;t[i]=m,e[i]=l,i=_}t[i]=r,e[i]=h}push(i,t){if(this.l===this.c)throw"heap full";if(this.h)this.k[1]=i,this.p[1]=t,this.l++,this.bbd(1),this.h=!1;else{let e=this.l+1;this.k[e]=i,this.p[e]=t,this.l++,this.bbu(e)}}pop(){if(0!==this.l)return this.rpe(),this.l--,this.h=!0,this.k[1]}peekPriority(){if(0!==this.l)return this.rpe(),this.p[1]}peek(){if(0!==this.l)return this.rpe(),this.k[1]}rpe(){this.h&&(this.k[1]=this.k[this.l+1],this.p[1]=this.p[this.l+1],this.bbd(1),this.h=!1)}}let currently_running_timer,TimerQueue=new MinQueue(1024),TimerDictionary=[],TimerNum=0,TickNum=0;function setTimeOut(i,t){let e=TickNum+Math.floor(t/50);TimerDictionary[TimerNum]=i,TimerQueue.push(TimerNum,e),TimerNum++}function tick(){if(TickNum++,currently_running_timer)currently_running_timer(),currently_running_timer=void 0;else if(TimerQueue.peekPriority()<=TickNum){let i=TimerQueue.peek();void 0!==i&&(currently_running_timer=TimerDictionary[i]),TimerQueue.pop(),delete TimerDictionary[i]}}
const hadesCooldowns = {};
onPlayerAltAction = (playerId) => {
const held = api.getHeldItem(playerId);
if (!held || held.name !== "Diamond Hoe" || held.attributes?.customDisplayName !== "Hades Scythe") return;
const now = Date.now();
const lastUse = hadesCooldowns[playerId] || 0;
const cooldown = 35000;
if (now - lastUse < cooldown) {
const s = Math.ceil((cooldown - (now - lastUse)) / 1000);
api.sendMessage(playerId, `Hades Scythe ready in ${s} seconds!`, { color: "red" });
return;
}
hadesCooldowns[playerId] = now;
const pos = api.getPosition(playerId);
const px = Math.floor(pos[0]), py = Math.floor(pos[1]), pz = Math.floor(pos[2]);
const blocksToRemove = [];
for (let dx = -5; dx <= 5; dx++)
for (let dy = 0; dy <= 4; dy++)
for (let dz = -5; dz <= 5; dz++) {
const isWall = dx === -5 || dx === 5 || dz === -5 || dz === 5;
const isRoof = dy === 4;
if (isWall || isRoof) {
const bx = px + dx, by = py + dy, bz = pz + dz;
api.setBlock(bx, by, bz, "Obsidian");
blocksToRemove.push([bx, by, bz]);
}
}
setTimeOut(() => {
for (const [bx, by, bz] of blocksToRemove)
if (api.getBlock(bx, by, bz) === "Obsidian")
api.setBlock(bx, by, bz, "Air");
}, 10000);
api.applyEffect(playerId, "Damage", 10000, { inbuiltLevel: 4 });
api.applyEffect(playerId, "Damage Reduction", 10000, { inbuiltLevel: 4 });
api.applyEffect(playerId, "Speed", 10000, { inbuiltLevel: 2 });
};
onPlayerDamagingOtherPlayer = (attacker, victim, damage, withItem) => {
const held = api.getHeldItem(attacker);
if (withItem === "Diamond Hoe" && held?.attributes?.customDisplayName === "Hades Scythe") {
api.applyHealthChange(victim, Math.round(-damage * 1.2));
if (Math.random() < 0.3) {
const eff = { icon: "Red Wool", displayName: "Health Drain", inbuiltLevel: 1 };
api.applyEffect(attacker, "Health Regen", 5000, eff);
api.applyEffect(victim, "Poisoned", 5000, eff);
}
}
};