mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-11-22 23:28:35 +01:00
Added Advanced Wings that let you fly much faster
This commit is contained in:
parent
8636a92df0
commit
e3dd81e11f
3 changed files with 44 additions and 17 deletions
|
@ -1,13 +1,16 @@
|
||||||
package ellpeck.actuallyadditions.event;
|
package ellpeck.actuallyadditions.event;
|
||||||
|
|
||||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
import cpw.mods.fml.relauncher.ReflectionHelper;
|
||||||
import ellpeck.actuallyadditions.config.values.ConfigBoolValues;
|
import ellpeck.actuallyadditions.config.values.ConfigBoolValues;
|
||||||
import ellpeck.actuallyadditions.config.values.ConfigIntValues;
|
import ellpeck.actuallyadditions.config.values.ConfigIntValues;
|
||||||
import ellpeck.actuallyadditions.items.InitItems;
|
import ellpeck.actuallyadditions.items.InitItems;
|
||||||
import ellpeck.actuallyadditions.items.ItemWingsOfTheBats;
|
import ellpeck.actuallyadditions.items.ItemWingsOfTheBats;
|
||||||
|
import ellpeck.actuallyadditions.util.ModUtil;
|
||||||
import net.minecraft.entity.item.EntityItem;
|
import net.minecraft.entity.item.EntityItem;
|
||||||
import net.minecraft.entity.passive.EntityOcelot;
|
import net.minecraft.entity.passive.EntityOcelot;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.entity.player.PlayerCapabilities;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
|
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
|
||||||
|
|
||||||
|
@ -33,7 +36,8 @@ public class EntityLivingEvent{
|
||||||
//Wings allowing Flight
|
//Wings allowing Flight
|
||||||
if(event.entityLiving instanceof EntityPlayer){
|
if(event.entityLiving instanceof EntityPlayer){
|
||||||
EntityPlayer player = (EntityPlayer)event.entityLiving;
|
EntityPlayer player = (EntityPlayer)event.entityLiving;
|
||||||
boolean wingsEquipped = ItemWingsOfTheBats.hasWingItem(player);
|
ItemStack wings = ItemWingsOfTheBats.getWingItem(player);
|
||||||
|
boolean wingsEquipped = wings != null;
|
||||||
|
|
||||||
//If Player isn't (really) winged
|
//If Player isn't (really) winged
|
||||||
if(!ItemWingsOfTheBats.isPlayerWinged(player)){
|
if(!ItemWingsOfTheBats.isPlayerWinged(player)){
|
||||||
|
@ -45,11 +49,17 @@ public class EntityLivingEvent{
|
||||||
//If Player is (or should be) winged
|
//If Player is (or should be) winged
|
||||||
else{
|
else{
|
||||||
if(wingsEquipped){
|
if(wingsEquipped){
|
||||||
//Allow the Player to fly when he has Wings equipped every tick
|
//Allow the Player to fly when he has Wings equipped
|
||||||
//It appears to be reset somewhere if you don't update it every tick
|
|
||||||
//but I haven't found the place where it gets reset which is slightly odd
|
|
||||||
//Maybe I just haven't searched enough or I am really stupid :D
|
|
||||||
player.capabilities.allowFlying = true;
|
player.capabilities.allowFlying = true;
|
||||||
|
|
||||||
|
if(((ItemWingsOfTheBats)wings.getItem()).isHastily){
|
||||||
|
//Speed Upgrade with hastily Wings
|
||||||
|
this.setFlySpeed(player, ItemWingsOfTheBats.FLY_SPEED);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
//When switching from Hastily to not Hastily immediately, still remove the Speed!
|
||||||
|
this.setFlySpeed(player, ItemWingsOfTheBats.STANDARD_FLY_SPEED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
//Make the Player not winged
|
//Make the Player not winged
|
||||||
|
@ -61,9 +71,19 @@ public class EntityLivingEvent{
|
||||||
//Enables Fall Damage again (Automatically gets disabled for some reason)
|
//Enables Fall Damage again (Automatically gets disabled for some reason)
|
||||||
player.capabilities.disableDamage = false;
|
player.capabilities.disableDamage = false;
|
||||||
}
|
}
|
||||||
|
//Remove the Speed Effect
|
||||||
|
this.setFlySpeed(player, ItemWingsOfTheBats.STANDARD_FLY_SPEED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setFlySpeed(EntityPlayer player, float speed){
|
||||||
|
try{
|
||||||
|
ReflectionHelper.setPrivateValue(PlayerCapabilities.class, player.capabilities, speed, 5);
|
||||||
|
}
|
||||||
|
catch(Exception e){
|
||||||
|
ModUtil.LOGGER.fatal("Something went wrong here!", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,6 +97,7 @@ public class InitItems{
|
||||||
|
|
||||||
public static Item itemTeleStaff;
|
public static Item itemTeleStaff;
|
||||||
public static Item itemWingsOfTheBats;
|
public static Item itemWingsOfTheBats;
|
||||||
|
public static Item itemWingsOfTheBatsHastily;
|
||||||
|
|
||||||
public static void init(){
|
public static void init(){
|
||||||
ModUtil.LOGGER.info("Initializing Items...");
|
ModUtil.LOGGER.info("Initializing Items...");
|
||||||
|
@ -116,8 +117,10 @@ public class InitItems{
|
||||||
itemTeleStaff = new ItemTeleStaff();
|
itemTeleStaff = new ItemTeleStaff();
|
||||||
ItemUtil.register(itemTeleStaff);
|
ItemUtil.register(itemTeleStaff);
|
||||||
|
|
||||||
itemWingsOfTheBats = new ItemWingsOfTheBats();
|
itemWingsOfTheBats = new ItemWingsOfTheBats(false);
|
||||||
ItemUtil.register(itemWingsOfTheBats);
|
ItemUtil.register(itemWingsOfTheBats);
|
||||||
|
itemWingsOfTheBatsHastily = new ItemWingsOfTheBats(true);
|
||||||
|
ItemUtil.register(itemWingsOfTheBatsHastily);
|
||||||
|
|
||||||
itemDrill = new ItemDrill();
|
itemDrill = new ItemDrill();
|
||||||
ItemUtil.register(itemDrill);
|
ItemUtil.register(itemDrill);
|
||||||
|
|
|
@ -22,15 +22,19 @@ public class ItemWingsOfTheBats extends Item implements INameableItem{
|
||||||
* Used so that Flight from other Mods' Items doesn't get broken when
|
* Used so that Flight from other Mods' Items doesn't get broken when
|
||||||
* these Wings aren't worn
|
* these Wings aren't worn
|
||||||
*
|
*
|
||||||
* Saves Remote Players specially to make Damage Display not bug
|
* Saves Remote Players separately to make de-synced Event Calling
|
||||||
* when taking off the Wings
|
* not bug out Capabilities when taking off the Wings
|
||||||
* (Because Client and Server LivingUpdateEvent get called kind of irregularly
|
|
||||||
* and not both at the same time (That's at least what I worked out when testing :D))
|
|
||||||
*/
|
*/
|
||||||
public static ArrayList<String> wingedPlayers = new ArrayList<>();
|
public static ArrayList<String> wingedPlayers = new ArrayList<>();
|
||||||
|
|
||||||
public ItemWingsOfTheBats(){
|
public static final float FLY_SPEED = 0.125F;
|
||||||
|
public static final float STANDARD_FLY_SPEED = 0.05F;
|
||||||
|
|
||||||
|
public boolean isHastily;
|
||||||
|
|
||||||
|
public ItemWingsOfTheBats(boolean isHastily){
|
||||||
this.setMaxStackSize(1);
|
this.setMaxStackSize(1);
|
||||||
|
this.isHastily = isHastily;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -68,7 +72,7 @@ public class ItemWingsOfTheBats extends Item implements INameableItem{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EnumRarity getRarity(ItemStack stack){
|
public EnumRarity getRarity(ItemStack stack){
|
||||||
return EnumRarity.epic;
|
return this.isHastily ? EnumRarity.epic : EnumRarity.rare;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -91,21 +95,21 @@ public class ItemWingsOfTheBats extends Item implements INameableItem{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName(){
|
public String getName(){
|
||||||
return "itemWingsOfTheBats";
|
return this.isHastily ? "itemWingOfTheBatsHastily" : "itemWingsOfTheBats";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the Player has Wings in its Inventory
|
* Checks if the Player has Wings in its Inventory
|
||||||
*
|
*
|
||||||
* @param player The Player
|
* @param player The Player
|
||||||
* @return If the Player has Wings
|
* @return The Wings
|
||||||
*/
|
*/
|
||||||
public static boolean hasWingItem(EntityPlayer player){
|
public static ItemStack getWingItem(EntityPlayer player){
|
||||||
for(int i = 0; i < player.inventory.getSizeInventory(); i++){
|
for(int i = 0; i < player.inventory.getSizeInventory(); i++){
|
||||||
if(player.inventory.getStackInSlot(i) != null && player.inventory.getStackInSlot(i).getItem() instanceof ItemWingsOfTheBats){
|
if(player.inventory.getStackInSlot(i) != null && player.inventory.getStackInSlot(i).getItem() instanceof ItemWingsOfTheBats){
|
||||||
return true;
|
return player.inventory.getStackInSlot(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue