mirror of
https://github.com/webbukkit/dynmap.git
synced 2024-11-25 03:35:18 +01:00
Added armor (merged from zeeZ).
This commit is contained in:
parent
3b16a36b99
commit
3fd511a8d1
30
src/main/java/org/dynmap/Armor.java
Normal file
30
src/main/java/org/dynmap/Armor.java
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
package org.dynmap;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class Armor {
|
||||||
|
/**
|
||||||
|
* http://www.minecraftwiki.net/wiki/Item_Durability#Armor_durability
|
||||||
|
* We rely on getArmorContents() to return 4 armor pieces in the order
|
||||||
|
* of: boots, pants, chest, helmet
|
||||||
|
*/
|
||||||
|
private static final double armorPoints[] = {1.5, 3.0, 4.0, 1.5};
|
||||||
|
|
||||||
|
public static final int getArmorPoints(Player player) {
|
||||||
|
int currentDurability = 0;
|
||||||
|
int baseDurability = 0;
|
||||||
|
double baseArmorPoints = 0;
|
||||||
|
ItemStack inventory[] = player.getInventory().getArmorContents();
|
||||||
|
for(int i=0;i<inventory.length;i++) {
|
||||||
|
final short maxDurability = inventory[i].getType().getMaxDurability();
|
||||||
|
if(maxDurability < 0)
|
||||||
|
continue;
|
||||||
|
final short durability = inventory[i].getDurability();
|
||||||
|
baseDurability += maxDurability;
|
||||||
|
currentDurability += maxDurability - durability;
|
||||||
|
baseArmorPoints += armorPoints[i];
|
||||||
|
}
|
||||||
|
return (int)(2*baseArmorPoints*currentDurability/baseDurability);
|
||||||
|
}
|
||||||
|
}
|
@ -45,6 +45,7 @@ public class ClientUpdateComponent extends Component {
|
|||||||
s(jp, "z", pl.getZ());
|
s(jp, "z", pl.getZ());
|
||||||
if (configuration.getBoolean("sendhealth", false)) {
|
if (configuration.getBoolean("sendhealth", false)) {
|
||||||
s(jp, "health", p.getHealth());
|
s(jp, "health", p.getHealth());
|
||||||
|
s(jp, "armor", Armor.getArmorPoints(p));
|
||||||
}
|
}
|
||||||
a(u, "players", jp);
|
a(u, "players", jp);
|
||||||
}
|
}
|
||||||
|
@ -529,19 +529,47 @@
|
|||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dynmap .playerHealth {
|
.dynmap .healthContainer {
|
||||||
|
display: block;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 3px;
|
bottom: 0;
|
||||||
left: 34px;
|
left: 34px;
|
||||||
height: 11px;
|
|
||||||
|
|
||||||
background: url(../images/heart.png) rgba(0,0,0,0.6) repeat-x left center;
|
width: 50px;
|
||||||
padding: 1px 0;
|
|
||||||
|
background: rgba(0,0,0,0.6);
|
||||||
|
padding: 2px;
|
||||||
|
|
||||||
-moz-border-radius: 3px;
|
-moz-border-radius: 3px;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dynmap .playerHealth {
|
||||||
|
height: 7px;
|
||||||
|
|
||||||
|
background: url(../images/heart.png) repeat-x left center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dynmap .playerHealthBackground {
|
||||||
|
height: 7px;
|
||||||
|
width: 50px;
|
||||||
|
|
||||||
|
background: url(../images/heart_depleted.png) repeat-x left center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dynmap .playerArmor {
|
||||||
|
height: 7px;
|
||||||
|
|
||||||
|
background: url(../images/armor.png) repeat-x left center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dynmap .playerArmorBackground {
|
||||||
|
height: 7px;
|
||||||
|
width: 50px;
|
||||||
|
|
||||||
|
background: url(../images/armor_depleted.png) repeat-x left center;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*******************
|
/*******************
|
||||||
* Compass
|
* Compass
|
||||||
|
BIN
web/images/armor.png
Normal file
BIN
web/images/armor.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 213 B |
BIN
web/images/armor_depleted.png
Normal file
BIN
web/images/armor_depleted.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 192 B |
Binary file not shown.
Before Width: | Height: | Size: 180 B After Width: | Height: | Size: 198 B |
BIN
web/images/heart_depleted.png
Normal file
BIN
web/images/heart_depleted.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 183 B |
@ -454,7 +454,8 @@ DynMap.prototype = {
|
|||||||
name: update.name,
|
name: update.name,
|
||||||
location: new Location(me.worlds[update.world], parseFloat(update.x), parseFloat(update.y), parseFloat(update.z)),
|
location: new Location(me.worlds[update.world], parseFloat(update.x), parseFloat(update.y), parseFloat(update.z)),
|
||||||
health: update.health,
|
health: update.health,
|
||||||
account: update.account
|
armor: update.armor,
|
||||||
|
account: update.account
|
||||||
};
|
};
|
||||||
|
|
||||||
$(me).trigger('playeradded', [ player ]);
|
$(me).trigger('playeradded', [ player ]);
|
||||||
@ -497,6 +498,7 @@ DynMap.prototype = {
|
|||||||
var me = this;
|
var me = this;
|
||||||
var location = player.location = new Location(me.worlds[update.world], parseFloat(update.x), parseFloat(update.y), parseFloat(update.z));
|
var location = player.location = new Location(me.worlds[update.world], parseFloat(update.x), parseFloat(update.y), parseFloat(update.z));
|
||||||
player.health = update.health;
|
player.health = update.health;
|
||||||
|
player.armor = update.armor;
|
||||||
|
|
||||||
$(me).trigger('playerupdated', [ player ]);
|
$(me).trigger('playerupdated', [ player ]);
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ componentconstructors['playermarkers'] = function(dynmap, configuration) {
|
|||||||
.text(player.name));
|
.text(player.name));
|
||||||
|
|
||||||
if (configuration.showplayerfaces) {
|
if (configuration.showplayerfaces) {
|
||||||
getMinecraftHead(player.account, 32, function(head) {
|
getMinecraftHead(player.name, 32, function(head) {
|
||||||
$(head)
|
$(head)
|
||||||
.addClass('playericon')
|
.addClass('playericon')
|
||||||
.prependTo(div);
|
.prependTo(div);
|
||||||
@ -23,10 +23,28 @@ componentconstructors['playermarkers'] = function(dynmap, configuration) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (configuration.showplayerhealth) {
|
if (configuration.showplayerhealth) {
|
||||||
player.healthBar = $('<div/>')
|
player.healthContainer = $('<div/>')
|
||||||
.addClass('playerHealth')
|
.addClass('healthContainer')
|
||||||
.css('width', (player.health/2*9) + 'px')
|
|
||||||
.appendTo(div);
|
.appendTo(div);
|
||||||
|
if (player.health !== undefined && player.armor !== undefined) {
|
||||||
|
player.healthBar = $('<div/>')
|
||||||
|
.addClass('playerHealth')
|
||||||
|
.css('width', (player.health/2*5) + 'px');
|
||||||
|
player.armorBar = $('<div/>')
|
||||||
|
.addClass('playerArmor')
|
||||||
|
.css('width', (player.armor/2*5) + 'px');
|
||||||
|
|
||||||
|
$('<div/>')
|
||||||
|
.addClass('playerHealthBackground')
|
||||||
|
.append(player.healthBar)
|
||||||
|
.appendTo(player.healthContainer);
|
||||||
|
$('<div/>')
|
||||||
|
.addClass('playerArmorBackground')
|
||||||
|
.append(player.armorBar)
|
||||||
|
.appendTo(player.healthContainer);
|
||||||
|
} else {
|
||||||
|
player.healthContainer.css('display','none');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -40,7 +58,14 @@ componentconstructors['playermarkers'] = function(dynmap, configuration) {
|
|||||||
player.marker.toggle(dynmap.world === player.location.world);
|
player.marker.toggle(dynmap.world === player.location.world);
|
||||||
player.marker.setPosition(markerPosition);
|
player.marker.setPosition(markerPosition);
|
||||||
// Update health
|
// Update health
|
||||||
if (configuration.showplayerhealth)
|
if (configuration.showplayerhealth) {
|
||||||
player.healthBar.css('width', (player.health/2*9) + 'px');
|
if (player.health !== undefined && player.armor !== undefined) {
|
||||||
|
player.healthContainer.css('display','block');
|
||||||
|
player.healthBar.css('width', (player.health/2*5) + 'px');
|
||||||
|
player.armorBar.css('width', (player.armor/2*5) + 'px');
|
||||||
|
} else {
|
||||||
|
player.healthContainer.css('display','none');
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
Loading…
Reference in New Issue
Block a user