feat: ported bat wings, solidified experience, resonant rice, probe

This commit is contained in:
Michael Hillcox 2021-05-04 17:47:45 +01:00
parent 2419a0e860
commit c87bfb6c94
10 changed files with 303 additions and 333 deletions

View File

@ -242,4 +242,8 @@ public final class ActuallyItems {
public static Item.Properties defaultProps() {
return new Item.Properties().group(ActuallyAdditions.GROUP);
}
public static Item.Properties defaultNonStacking() {
return defaultProps().maxStackSize(1);
}
}

View File

@ -24,8 +24,8 @@ import net.minecraft.util.Direction;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.World;
import java.util.List;
@ -46,7 +46,7 @@ public class ItemLaserWrench extends ItemBase {
if (!world.isRemote) {
if (ItemPhantomConnector.getStoredPosition(stack) == null) {
ItemPhantomConnector.storeConnection(stack, pos.getX(), pos.getY(), pos.getZ(), world);
player.sendStatusMessage(new TextComponentTranslation("tooltip." + ActuallyAdditions.MODID + ".laser.stored.desc"), true);
player.sendStatusMessage(new TranslationTextComponent("tooltip." + ActuallyAdditions.MODID + ".laser.stored.desc"), true);
} else {
BlockPos savedPos = ItemPhantomConnector.getStoredPosition(stack);
if (savedPos != null) {
@ -57,19 +57,19 @@ public class ItemLaserWrench extends ItemBase {
int lowestRange = Math.min(relay.getMaxRange(), savedRelay.getMaxRange());
int range = lowestRange * lowestRange;
if (ItemPhantomConnector.getStoredWorld(stack) == world && savedRelay.type == relay.type && distanceSq <= range && ActuallyAdditionsAPI.connectionHandler.addConnection(savedPos, pos, relay.type, world, false, true)) {
if (ItemPhantomConnector.getStoredWorld(stack) == world.getDimensionKey() && savedRelay.type == relay.type && distanceSq <= range && ActuallyAdditionsAPI.connectionHandler.addConnection(savedPos, pos, relay.type, world, false, true)) {
ItemPhantomConnector.clearStorage(stack, "XCoordOfTileStored", "YCoordOfTileStored", "ZCoordOfTileStored", "WorldOfTileStored");
((TileEntityLaserRelay) savedTile).sendUpdate();
relay.sendUpdate();
player.sendStatusMessage(new TextComponentTranslation("tooltip." + ActuallyAdditions.MODID + ".laser.connected.desc"), true);
player.sendStatusMessage(new TranslationTextComponent("tooltip." + ActuallyAdditions.MODID + ".laser.connected.desc"), true);
return EnumActionResult.SUCCESS;
}
}
player.sendMessage(new TextComponentTranslation("tooltip." + ActuallyAdditions.MODID + ".laser.cantConnect.desc"));
player.sendMessage(new TranslationTextComponent("tooltip." + ActuallyAdditions.MODID + ".laser.cantConnect.desc"));
ItemPhantomConnector.clearStorage(stack, "XCoordOfTileStored", "YCoordOfTileStored", "ZCoordOfTileStored", "WorldOfTileStored");
}
}

View File

@ -14,21 +14,21 @@ import de.ellpeck.actuallyadditions.api.tile.IPhantomTile;
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase;
import de.ellpeck.actuallyadditions.mod.util.StringUtil;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUseContext;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.RegistryKey;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.util.registry.Registry;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;
import javax.annotation.Nullable;
import java.util.List;
@ -36,102 +36,91 @@ import java.util.List;
public class ItemPhantomConnector extends ItemBase {
public ItemPhantomConnector() {
super(name);
this.setMaxStackSize(1);
super(ActuallyItems.defaultNonStacking());
}
public static World getStoredWorld(ItemStack stack) {
CompoundNBT tag = stack.getTagCompound();
if (tag != null) {
return DimensionManager.getWorld(tag.getInteger("WorldOfTileStored"));
public static RegistryKey<World> getStoredWorld(ItemStack stack) {
CompoundNBT tag = stack.getOrCreateTag();
if (!tag.contains("WorldOfTileStored")) {
return null;
}
return null;
return RegistryKey.getOrCreateKey(Registry.WORLD_KEY, new ResourceLocation(tag.getString("WorldOfTileStored")));
}
public static BlockPos getStoredPosition(ItemStack stack) {
CompoundNBT tag = stack.getTagCompound();
if (tag != null) {
int x = tag.getInteger("XCoordOfTileStored");
int y = tag.getInteger("YCoordOfTileStored");
int z = tag.getInteger("ZCoordOfTileStored");
if (!(x == 0 && y == 0 && z == 0)) {
return new BlockPos(x, y, z);
}
CompoundNBT tag = stack.getOrCreateTag();
int x = tag.getInt("XCoordOfTileStored");
int y = tag.getInt("YCoordOfTileStored");
int z = tag.getInt("ZCoordOfTileStored");
if (!(x == 0 && y == 0 && z == 0)) {
return new BlockPos(x, y, z);
}
return null;
}
public static void clearStorage(ItemStack stack, String... keys) {
if (stack.hasTagCompound()) {
CompoundNBT compound = stack.getTagCompound();
for (String key : keys) {
compound.removeTag(key);
}
CompoundNBT compound = stack.getOrCreateTag();
for (String key : keys) {
compound.remove(key);
}
}
public static void storeConnection(ItemStack stack, int x, int y, int z, World world) {
CompoundNBT tag = stack.getTagCompound();
if (tag == null) {
tag = new CompoundNBT();
}
CompoundNBT tag = stack.getOrCreateTag();
tag.setInteger("XCoordOfTileStored", x);
tag.setInteger("YCoordOfTileStored", y);
tag.setInteger("ZCoordOfTileStored", z);
tag.setInteger("WorldOfTileStored", world.provider.getDimension());
stack.setTagCompound(tag);
tag.putInt("XCoordOfTileStored", x);
tag.putInt("YCoordOfTileStored", y);
tag.putInt("ZCoordOfTileStored", z);
tag.putString("WorldOfTileStored", world.getDimensionKey().getLocation().toString());
}
@Override
public EnumActionResult onItemUse(PlayerEntity player, World world, BlockPos pos, Hand hand, Direction par7, float par8, float par9, float par10) {
ItemStack stack = player.getHeldItem(hand);
if (!world.isRemote) {
public ActionResultType onItemUse(ItemUseContext context) {
ItemStack stack = context.getPlayer().getHeldItem(context.getHand());
if (!context.getWorld().isRemote) {
//Passing Data to Phantoms
TileEntity tile = world.getTileEntity(pos);
BlockPos pos = context.getPos();
TileEntity tile = context.getWorld().getTileEntity(pos);
if (tile != null) {
//Passing to Phantom
if (tile instanceof IPhantomTile) {
BlockPos stored = getStoredPosition(stack);
if (stored != null && getStoredWorld(stack) == world) {
if (stored != null && getStoredWorld(stack) == context.getWorld().getDimensionKey()) {
((IPhantomTile) tile).setBoundPosition(stored);
if (tile instanceof TileEntityBase) {
((TileEntityBase) tile).sendUpdate();
}
clearStorage(stack, "XCoordOfTileStored", "YCoordOfTileStored", "ZCoordOfTileStored", "WorldOfTileStored");
player.sendStatusMessage(new TextComponentTranslation("tooltip." + ActuallyAdditions.MODID + ".phantom.connected.desc"), true);
return EnumActionResult.SUCCESS;
context.getPlayer().sendStatusMessage(new TranslationTextComponent("tooltip." + ActuallyAdditions.MODID + ".phantom.connected.desc"), true);
return ActionResultType.SUCCESS;
}
return EnumActionResult.FAIL;
return ActionResultType.FAIL;
}
}
//Storing Connections
storeConnection(stack, pos.getX(), pos.getY(), pos.getZ(), world);
player.sendStatusMessage(new TextComponentTranslation("tooltip." + ActuallyAdditions.MODID + ".phantom.stored.desc"), true);
storeConnection(stack, pos.getX(), pos.getY(), pos.getZ(), context.getWorld());
context.getPlayer().sendStatusMessage(new TranslationTextComponent("tooltip." + ActuallyAdditions.MODID + ".phantom.stored.desc"), true);
}
return EnumActionResult.SUCCESS;
return ActionResultType.SUCCESS;
}
@Nullable
@Override
public CompoundNBT getShareTag(ItemStack stack) {
return new CompoundNBT();
}
@Override
public boolean getShareTag() {
return true;
}
@Override
public void addInformation(ItemStack stack, @Nullable World playerIn, List<String> list, ITooltipFlag advanced) {
public void addInformation(ItemStack stack, @Nullable World playerIn, List<ITextComponent> list, ITooltipFlag advanced) {
BlockPos coords = getStoredPosition(stack);
if (coords != null) {
list.add(StringUtil.localize("tooltip." + ActuallyAdditions.MODID + ".boundTo.desc") + ":");
list.add("X: " + coords.getX());
list.add("Y: " + coords.getY());
list.add("Z: " + coords.getZ());
list.add(TextFormatting.ITALIC + StringUtil.localize("tooltip." + ActuallyAdditions.MODID + ".clearStorage.desc"));
list.add(new TranslationTextComponent("tooltip." + ActuallyAdditions.MODID + ".boundTo.desc").appendString(":"));
list.add(new StringTextComponent("X: " + coords.getX()));
list.add(new StringTextComponent("Y: " + coords.getY()));
list.add(new StringTextComponent("Z: " + coords.getZ()));
list.add(new TranslationTextComponent("tooltip." + ActuallyAdditions.MODID + ".clearStorage.desc").mergeStyle(TextFormatting.ITALIC));
}
}
@Override
public EnumRarity getRarity(ItemStack stack) {
return EnumRarity.EPIC;
}
}

View File

@ -14,19 +14,18 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
import de.ellpeck.actuallyadditions.mod.tile.TileEntityPlayerInterface;
import de.ellpeck.actuallyadditions.mod.util.StackUtil;
import de.ellpeck.actuallyadditions.mod.util.StringUtil;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUseContext;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.World;
import javax.annotation.Nullable;
@ -39,56 +38,58 @@ public class ItemPlayerProbe extends ItemBase {
super(ActuallyItems.defaultProps().maxStackSize(1));
}
// TODO: [port] might be the wrong event
@Override
public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) {
public void inventoryTick(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) {
if (!world.isRemote) {
if (stack.hasTagCompound()) {
CompoundNBT compound = stack.getTagCompound();
if (compound.hasKey("UUIDMost")) {
UUID id = compound.getUniqueId("UUID");
PlayerEntity player = world.getPlayerEntityByUUID(id);
if (player != null) {
if (player.isSneaking()) {
ItemPhantomConnector.clearStorage(stack, "UUIDLeast", "UUIDMost", "Name");
entity.sendMessage(new TextComponentTranslation("tooltip." + ActuallyAdditions.MODID + ".playerProbe.disconnect.1"));
player.sendMessage(new TextComponentTranslation("tooltip." + ActuallyAdditions.MODID + ".playerProbe.notice"));
//TheAchievements.GET_UNPROBED.get(player);
}
} else {
CompoundNBT compound = stack.getOrCreateTag();
if (compound.contains("UUIDMost")) {
UUID id = compound.getUniqueId("UUID");
PlayerEntity player = world.getPlayerByUuid(id);
if (player != null) {
if (player.isSneaking()) {
ItemPhantomConnector.clearStorage(stack, "UUIDLeast", "UUIDMost", "Name");
entity.sendMessage(new TextComponentTranslation("tooltip." + ActuallyAdditions.MODID + ".playerProbe.disconnect.2"));
((PlayerEntity) entity).sendStatusMessage(new TranslationTextComponent("tooltip." + ActuallyAdditions.MODID + ".playerProbe.disconnect.1"), false);
player.sendStatusMessage(new TranslationTextComponent("tooltip." + ActuallyAdditions.MODID + ".playerProbe.notice"), false);
//TheAchievements.GET_UNPROBED.get(player);
}
} else {
ItemPhantomConnector.clearStorage(stack, "UUIDLeast", "UUIDMost", "Name");
((PlayerEntity) entity).sendStatusMessage(new TranslationTextComponent("tooltip." + ActuallyAdditions.MODID + ".playerProbe.disconnect.2"), false);
}
}
}
}
@Override
public EnumActionResult onItemUse(PlayerEntity player, World world, BlockPos pos, Hand hand, Direction facing, float hitX, float hitY, float hitZ) {
ItemStack stack = player.getHeldItem(hand);
TileEntity tile = world.getTileEntity(pos);
public ActionResultType onItemUse(ItemUseContext context) {
PlayerEntity player = context.getPlayer();
if (player == null) {
return ActionResultType.FAIL;
}
ItemStack stack = player.getHeldItem(context.getHand());
TileEntity tile = context.getWorld().getTileEntity(context.getPos());
if (tile instanceof TileEntityPlayerInterface) {
if (stack.hasTagCompound()) {
CompoundNBT compound = stack.getTagCompound();
if (compound.hasKey("UUIDMost")) {
if (!world.isRemote) {
TileEntityPlayerInterface face = (TileEntityPlayerInterface) tile;
face.connectedPlayer = compound.getUniqueId("UUID");
face.playerName = compound.getString("Name");
face.markDirty();
face.sendUpdate();
CompoundNBT compound = stack.getOrCreateTag();
if (compound.contains("UUIDMost")) {
if (!context.getWorld().isRemote) {
TileEntityPlayerInterface face = (TileEntityPlayerInterface) tile;
face.connectedPlayer = compound.getUniqueId("UUID");
face.playerName = compound.getString("Name");
face.markDirty();
face.sendUpdate();
ItemPhantomConnector.clearStorage(stack, "UUIDLeast", "UUIDMost", "Name");
}
return EnumActionResult.SUCCESS;
ItemPhantomConnector.clearStorage(stack, "UUIDLeast", "UUIDMost", "Name");
}
return ActionResultType.SUCCESS;
}
}
return EnumActionResult.FAIL;
return ActionResultType.FAIL;
}
@Override
public boolean itemInteractionForEntity(ItemStack aStack, PlayerEntity player, EntityLivingBase entity, Hand hand) {
public ActionResultType itemInteractionForEntity(ItemStack aStack, PlayerEntity player, LivingEntity entity, Hand hand) {
if (!player.world.isRemote) {
ItemStack stack = player.getHeldItemMainhand();
if (StackUtil.isValid(stack) && stack.getItem() == this) {
@ -96,28 +97,22 @@ public class ItemPlayerProbe extends ItemBase {
PlayerEntity playerHit = (PlayerEntity) entity;
if (!playerHit.isSneaking()) {
if (!stack.hasTagCompound()) {
stack.setTagCompound(new CompoundNBT());
}
CompoundNBT compound = stack.getTagCompound();
compound.setString("Name", playerHit.getName());
compound.setUniqueId("UUID", playerHit.getUniqueID());
return true;
CompoundNBT compound = stack.getOrCreateTag();
compound.putString("Name", playerHit.getName().getString());
compound.putUniqueId("UUID", playerHit.getUniqueID());
return ActionResultType.SUCCESS;
}
}
}
}
return false;
return ActionResultType.FAIL;
}
@Override
public void addInformation(ItemStack stack, @Nullable World playerIn, List<String> tooltip, ITooltipFlag advanced) {
if (stack.hasTagCompound()) {
String name = stack.getTagCompound().getString("Name");
if (name != null) {
tooltip.add(StringUtil.localize("tooltip." + ActuallyAdditions.MODID + ".playerProbe.probing") + ": " + name);
}
public void addInformation(ItemStack stack, @Nullable World playerIn, List<ITextComponent> tooltip, ITooltipFlag advanced) {
if (stack.getOrCreateTag().contains("Name")) {
String name = stack.getOrCreateTag().getString("Name");
tooltip.add(new TranslationTextComponent("tooltip." + ActuallyAdditions.MODID + ".playerProbe.probing").appendString(": " + name));
}
}
}

View File

@ -12,17 +12,16 @@ package de.ellpeck.actuallyadditions.mod.items;
import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.Hand;
import net.minecraft.world.Explosion;
import net.minecraft.world.World;
public class ItemResonantRice extends ItemBase {
public ItemResonantRice() {
super(name);
super();
}
@Override
@ -30,13 +29,8 @@ public class ItemResonantRice extends ItemBase {
ItemStack stack = player.getHeldItem(hand);
if (!world.isRemote) {
stack.shrink(1);
world.createExplosion(null, player.posX, player.posY, player.posZ, 0.5F, true);
world.createExplosion(null, player.getPosX(), player.getPosY(), player.getPosZ(), 0.5F, Explosion.Mode.DESTROY);
}
return new ActionResult<>(EnumActionResult.SUCCESS, stack);
}
@Override
public EnumRarity getRarity(ItemStack stack) {
return EnumRarity.EPIC;
return ActionResult.resultSuccess(stack);
}
}

View File

@ -13,39 +13,39 @@ package de.ellpeck.actuallyadditions.mod.items;
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues;
import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
import net.minecraft.entity.EntityCreature;
import net.minecraft.entity.item.EntityXPOrb;
import net.minecraft.entity.CreatureEntity;
import net.minecraft.entity.item.ExperienceOrbEntity;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.Hand;
import net.minecraft.world.GameRules;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.FakePlayer;
import net.minecraftforge.event.entity.living.LivingDropsEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
public class ItemSolidifiedExperience extends ItemBase {
public static final int SOLID_XP_AMOUNT = 8;
public ItemSolidifiedExperience() {
super(name);
super();
// TODO: [port] move this to another place
MinecraftForge.EVENT_BUS.register(this);
}
@SubscribeEvent
public void onEntityDropEvent(LivingDropsEvent event) {
if (ConfigBoolValues.DO_XP_DROPS.isEnabled()) {
if (event.getEntityLiving().world != null && !event.getEntityLiving().world.isRemote && event.getSource().getTrueSource() instanceof PlayerEntity && event.getEntityLiving().world.getGameRules().getBoolean("doMobLoot")) {
if (event.getEntityLiving().world != null && !event.getEntityLiving().world.isRemote && event.getSource().getTrueSource() instanceof PlayerEntity && event.getEntityLiving().world.getGameRules().getBoolean(GameRules.DO_MOB_LOOT)) {
//Drop Solidified XP
if (event.getEntityLiving() instanceof EntityCreature) {
if (event.getEntityLiving() instanceof CreatureEntity) {
if (event.getEntityLiving().world.rand.nextInt(10) <= event.getLootingLevel() * 2) {
event.getDrops().add(new ItemEntity(event.getEntityLiving().world, event.getEntityLiving().posX, event.getEntityLiving().posY, event.getEntityLiving().posZ, new ItemStack(ActuallyItems.SOLIDIFIED_EXPERIENCE, event.getEntityLiving().world.rand.nextInt(2 + event.getLootingLevel()) + 1)));
event.getDrops().add(new ItemEntity(event.getEntityLiving().world, event.getEntityLiving().getPosX(), event.getEntityLiving().getPosY(), event.getEntityLiving().getPosZ(), new ItemStack(ActuallyItems.SOLIDIFIED_EXPERIENCE.get(), event.getEntityLiving().world.rand.nextInt(2 + event.getLootingLevel()) + 1)));
}
}
}
@ -70,18 +70,13 @@ public class ItemSolidifiedExperience extends ItemBase {
}
if (ConfigBoolValues.SOLID_XP_ALWAYS_ORBS.currentValue || player instanceof FakePlayer) {
EntityXPOrb orb = new EntityXPOrb(world, player.posX + 0.5, player.posY + 0.5, player.posZ + 0.5, amount);
orb.getEntityData().putBoolean(ActuallyAdditions.MODID + "FromSolidified", true);
ExperienceOrbEntity orb = new ExperienceOrbEntity(world, player.getPosX() + 0.5, player.getPosY() + 0.5, player.getPosZ() + 0.5, amount);
orb.getPersistentData().putBoolean(ActuallyAdditions.MODID + "FromSolidified", true);
world.addEntity(orb);
} else {
player.addExperience(amount);
player.addExperienceLevel(amount);
}
}
return new ActionResult<>(EnumActionResult.SUCCESS, stack);
}
@Override
public EnumRarity getRarity(ItemStack stack) {
return EnumRarity.UNCOMMON;
return ActionResult.resultSuccess(stack);
}
}

View File

@ -1,141 +1,142 @@
/*
* This file ("ItemSpawnerChanger.java") is part of the Actually Additions mod for Minecraft.
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
* http://ellpeck.de/actaddlicense
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
*
* © 2015-2017 Ellpeck
*/
package de.ellpeck.actuallyadditions.mod.items;
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues;
import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
import de.ellpeck.actuallyadditions.mod.util.StackUtil;
import de.ellpeck.actuallyadditions.mod.util.StringUtil;
import net.minecraft.block.BlockState;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.entity.EntityList;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.MobSpawnerBaseLogic;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityMobSpawner;
import net.minecraft.util.Direction;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World;
import java.util.List;
public class ItemSpawnerChanger extends ItemBase {
public ItemSpawnerChanger() {
super(name);
this.setMaxStackSize(1);
}
@Override
public EnumActionResult onItemUse(PlayerEntity player, World world, BlockPos pos, Hand hand, Direction facing, float hitX, float hitY, float hitZ) {
if (!world.isRemote) {
ItemStack stack = player.getHeldItemMainhand();
if (player.canPlayerEdit(pos.offset(facing), facing, stack)) {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileEntityMobSpawner) {
String entity = this.getStoredEntity(stack);
if (entity != null) {
MobSpawnerBaseLogic logic = ((TileEntityMobSpawner) tile).getSpawnerBaseLogic();
//This is a hacky way to remove the spawn potentials that make the spawner reset from time to time
//Don't judge, there isn't a method for it and it's better than Reflection hackiness
CompoundNBT compound = new CompoundNBT();
logic.writeToNBT(compound);
compound.removeTag("SpawnPotentials");
compound.removeTag("SpawnData");
logic.readFromNBT(compound);
logic.setEntityId(new ResourceLocation(entity));
tile.markDirty();
BlockState state = world.getBlockState(pos);
world.notifyBlockUpdate(pos, state, state, 3);
ItemPhantomConnector.clearStorage(stack, "Entity");
if (!player.isCreative()) {
player.setHeldItem(hand, StackUtil.shrink(stack, 1));
}
return EnumActionResult.SUCCESS;
}
}
}
}
return EnumActionResult.FAIL;
}
@Override
public boolean itemInteractionForEntity(ItemStack aStack, PlayerEntity player, EntityLivingBase entity, Hand hand) {
if (!player.world.isRemote) {
ItemStack stack = player.getHeldItemMainhand();
if (this.getStoredEntity(stack) == null) {
if (this.storeClickedEntity(stack, entity)) {
entity.setDead();
}
}
return true;
}
return false;
}
private boolean storeClickedEntity(ItemStack stack, EntityLivingBase entity) {
if (!stack.hasTagCompound()) {
stack.setTagCompound(new CompoundNBT());
}
if (!(entity instanceof PlayerEntity) && entity.isNonBoss()) {
ResourceLocation entityLoc = EntityList.getKey(entity.getClass());
if (entityLoc != null) {
String entityName = entityLoc.toString();
if (entityName != null && !entityName.isEmpty()) {
for (String name : ConfigStringListValues.SPAWNER_CHANGER_BLACKLIST.getValue()) {
if (entityName.equals(name)) {
return false;
}
}
stack.getTagCompound().setString("Entity", entityName);
return true;
}
}
}
return false;
}
private String getStoredEntity(ItemStack stack) {
if (stack.hasTagCompound()) {
String entity = stack.getTagCompound().getString("Entity");
if (entity != null && !entity.isEmpty()) {
return entity;
}
}
return null;
}
@Override
public void addInformation(ItemStack stack, World playerIn, List<String> list, ITooltipFlag advanced) {
String entity = this.getStoredEntity(stack);
if (entity != null) {
list.add("Entity: " + entity);
list.add(TextFormatting.ITALIC + StringUtil.localize("tooltip." + ActuallyAdditions.MODID + ".clearStorage.desc"));
}
}
}
// TODO: [port] REMOVE THIS CLASS, NO longer needed
///*
// * This file ("ItemSpawnerChanger.java") is part of the Actually Additions mod for Minecraft.
// * It is created and owned by Ellpeck and distributed
// * under the Actually Additions License to be found at
// * http://ellpeck.de/actaddlicense
// * View the source code at https://github.com/Ellpeck/ActuallyAdditions
// *
// * © 2015-2017 Ellpeck
// */
//
//package de.ellpeck.actuallyadditions.mod.items;
//
//import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
//import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues;
//import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
//import de.ellpeck.actuallyadditions.mod.util.StackUtil;
//import de.ellpeck.actuallyadditions.mod.util.StringUtil;
//import net.minecraft.block.BlockState;
//import net.minecraft.client.util.ITooltipFlag;
//import net.minecraft.entity.EntityList;
//import net.minecraft.entity.EntityLivingBase;
//import net.minecraft.entity.player.PlayerEntity;
//import net.minecraft.item.ItemStack;
//import net.minecraft.nbt.CompoundNBT;
//import net.minecraft.tileentity.MobSpawnerBaseLogic;
//import net.minecraft.tileentity.TileEntity;
//import net.minecraft.tileentity.TileEntityMobSpawner;
//import net.minecraft.util.Direction;
//import net.minecraft.util.EnumActionResult;
//import net.minecraft.util.Hand;
//import net.minecraft.util.ResourceLocation;
//import net.minecraft.util.math.BlockPos;
//import net.minecraft.util.text.TextFormatting;
//import net.minecraft.world.World;
//
//import java.util.List;
//
//public class ItemSpawnerChanger extends ItemBase {
//
// public ItemSpawnerChanger() {
// super();
// this.setMaxStackSize(1);
// }
//
// @Override
// public EnumActionResult onItemUse(PlayerEntity player, World world, BlockPos pos, Hand hand, Direction facing, float hitX, float hitY, float hitZ) {
// if (!world.isRemote) {
// ItemStack stack = player.getHeldItemMainhand();
// if (player.canPlayerEdit(pos.offset(facing), facing, stack)) {
// TileEntity tile = world.getTileEntity(pos);
// if (tile instanceof TileEntityMobSpawner) {
// String entity = this.getStoredEntity(stack);
// if (entity != null) {
// MobSpawnerBaseLogic logic = ((TileEntityMobSpawner) tile).getSpawnerBaseLogic();
//
// //This is a hacky way to remove the spawn potentials that make the spawner reset from time to time
// //Don't judge, there isn't a method for it and it's better than Reflection hackiness
// CompoundNBT compound = new CompoundNBT();
// logic.writeToNBT(compound);
// compound.removeTag("SpawnPotentials");
// compound.removeTag("SpawnData");
// logic.readFromNBT(compound);
//
// logic.setEntityId(new ResourceLocation(entity));
//
// tile.markDirty();
//
// BlockState state = world.getBlockState(pos);
// world.notifyBlockUpdate(pos, state, state, 3);
//
// ItemPhantomConnector.clearStorage(stack, "Entity");
//
// if (!player.isCreative()) {
// player.setHeldItem(hand, StackUtil.shrink(stack, 1));
// }
//
// return EnumActionResult.SUCCESS;
// }
// }
// }
// }
// return EnumActionResult.FAIL;
// }
//
// @Override
// public boolean itemInteractionForEntity(ItemStack aStack, PlayerEntity player, EntityLivingBase entity, Hand hand) {
// if (!player.world.isRemote) {
// ItemStack stack = player.getHeldItemMainhand();
// if (this.getStoredEntity(stack) == null) {
// if (this.storeClickedEntity(stack, entity)) {
// entity.setDead();
// }
// }
// return true;
// }
// return false;
// }
//
// private boolean storeClickedEntity(ItemStack stack, EntityLivingBase entity) {
// if (!stack.hasTagCompound()) {
// stack.setTagCompound(new CompoundNBT());
// }
//
// if (!(entity instanceof PlayerEntity) && entity.isNonBoss()) {
// ResourceLocation entityLoc = EntityList.getKey(entity.getClass());
// if (entityLoc != null) {
// String entityName = entityLoc.toString();
// if (entityName != null && !entityName.isEmpty()) {
// for (String name : ConfigStringListValues.SPAWNER_CHANGER_BLACKLIST.getValue()) {
// if (entityName.equals(name)) {
// return false;
// }
// }
//
// stack.getTagCompound().setString("Entity", entityName);
// return true;
// }
// }
// }
// return false;
// }
//
// private String getStoredEntity(ItemStack stack) {
// if (stack.hasTagCompound()) {
// String entity = stack.getTagCompound().getString("Entity");
// if (entity != null && !entity.isEmpty()) {
// return entity;
// }
// }
// return null;
// }
//
// @Override
// public void addInformation(ItemStack stack, World playerIn, List<String> list, ITooltipFlag advanced) {
// String entity = this.getStoredEntity(stack);
// if (entity != null) {
// list.add("Entity: " + entity);
// list.add(TextFormatting.ITALIC + StringUtil.localize("tooltip." + ActuallyAdditions.MODID + ".clearStorage.desc"));
// }
// }
//}

View File

@ -10,27 +10,27 @@
package de.ellpeck.actuallyadditions.mod.items;
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues;
import de.ellpeck.actuallyadditions.mod.data.PlayerData;
import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
import de.ellpeck.actuallyadditions.mod.network.PacketHandlerHelper;
import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy;
import de.ellpeck.actuallyadditions.mod.util.StackUtil;
import net.minecraft.block.BlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.passive.EntityBat;
import net.minecraft.entity.passive.BatEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraft.item.SwordItem;
import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.living.LivingDropsEvent;
import net.minecraftforge.event.entity.living.LivingEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
public class ItemWingsOfTheBats extends ItemBase {
@ -38,9 +38,9 @@ public class ItemWingsOfTheBats extends ItemBase {
public static final int MAX_FLY_TIME = 800;
public ItemWingsOfTheBats() {
super(name);
this.setMaxStackSize(1);
super(ActuallyItems.defaultProps().maxStackSize(1));
// TODO: Lets move this somewhere global. Don't like event logic in a single place.
MinecraftForge.EVENT_BUS.register(this);
}
@ -67,26 +67,22 @@ public class ItemWingsOfTheBats extends ItemBase {
@Override
public double getDurabilityForDisplay(ItemStack stack) {
PlayerEntity player = ActuallyAdditions.PROXY.getCurrentPlayer();
PlayerEntity player = ClientProxy.getCurrentPlayer();
if (player != null) {
PlayerData.PlayerSave data = PlayerData.getDataFromPlayer(player);
if (data != null) {
double diff = MAX_FLY_TIME - data.batWingsFlyTime;
return 1 - diff / MAX_FLY_TIME;
}
double diff = MAX_FLY_TIME - data.batWingsFlyTime;
return 1 - diff / MAX_FLY_TIME;
}
return super.getDurabilityForDisplay(stack);
}
@Override
public int getRGBDurabilityForDisplay(ItemStack stack) {
PlayerEntity player = ActuallyAdditions.PROXY.getCurrentPlayer();
PlayerEntity player = ClientProxy.getCurrentPlayer();
if (player != null) {
PlayerData.PlayerSave data = PlayerData.getDataFromPlayer(player);
if (data != null) {
int curr = data.batWingsFlyTime;
return MathHelper.hsvToRGB(Math.max(0.0F, 1 - (float) curr / MAX_FLY_TIME) / 3.0F, 1.0F, 1.0F);
}
int curr = data.batWingsFlyTime;
return MathHelper.hsvToRGB(Math.max(0.0F, 1 - (float) curr / MAX_FLY_TIME) / 3.0F, 1.0F, 1.0F);
}
return super.getRGBDurabilityForDisplay(stack);
}
@ -97,19 +93,21 @@ public class ItemWingsOfTheBats extends ItemBase {
if (event.getEntityLiving().world != null && !event.getEntityLiving().world.isRemote && source instanceof PlayerEntity) {
//Drop Wings from Bats
if (ConfigBoolValues.DO_BAT_DROPS.isEnabled() && event.getEntityLiving() instanceof EntityBat) {
if (ConfigBoolValues.DO_BAT_DROPS.isEnabled() && event.getEntityLiving() instanceof BatEntity) {
int looting = event.getLootingLevel();
Iterable<ItemStack> equip = source.getHeldEquipment();
for (ItemStack stack : equip) {
if (StackUtil.isValid(stack) && ItemWingsOfTheBats.THE_BAT_BAT.equalsIgnoreCase(stack.getDisplayName()) && stack.getItem() instanceof ItemSword) {
// Todo: [port] this might not work anymore due to the way things are checked
if (StackUtil.isValid(stack) && ItemWingsOfTheBats.THE_BAT_BAT.equalsIgnoreCase(stack.getDisplayName().getString()) && stack.getItem() instanceof SwordItem) {
looting += 3;
break;
}
}
if (event.getEntityLiving().world.rand.nextInt(15) <= looting * 2) {
event.getDrops().add(new ItemEntity(event.getEntityLiving().world, event.getEntityLiving().posX, event.getEntityLiving().posY, event.getEntityLiving().posZ, new ItemStack(ActuallyItems.BAT_WING.get(), event.getEntityLiving().world.rand.nextInt(2 + looting) + 1)));
LivingEntity entityLiving = event.getEntityLiving();
event.getDrops().add(new ItemEntity(event.getEntityLiving().world, entityLiving.getPosX(), entityLiving.getPosY(), entityLiving.getPosZ(), new ItemStack(ActuallyItems.BAT_WING.get(), event.getEntityLiving().world.rand.nextInt(2 + looting) + 1)));
}
}
}
@ -139,12 +137,12 @@ public class ItemWingsOfTheBats extends ItemBase {
}
} else {
if (wingsEquipped && data.batWingsFlyTime < MAX_FLY_TIME) {
player.capabilities.allowFlying = true;
player.abilities.allowFlying = true;
if (player.capabilities.isFlying) {
if (player.abilities.isFlying) {
data.batWingsFlyTime++;
if (player.world.getTotalWorldTime() % 10 == 0) {
if (player.world.getWorldInfo().getGameTime() % 10 == 0) {
shouldSend = true;
}
}
@ -155,21 +153,21 @@ public class ItemWingsOfTheBats extends ItemBase {
data.shouldDisableBatWings = true;
shouldSend = true;
player.capabilities.allowFlying = false;
player.capabilities.isFlying = false;
player.capabilities.disableDamage = false;
player.abilities.allowFlying = false;
player.abilities.isFlying = false;
player.abilities.disableDamage = false;
}
}
if (tryDeduct && data.batWingsFlyTime > 0) {
int deductTime = 0;
if (!player.capabilities.isFlying) {
if (!player.abilities.isFlying) {
deductTime = 2;
} else {
BlockPos pos = new BlockPos(player.posX, player.posY + player.height, player.posZ);
BlockPos pos = new BlockPos(player.getPosX(), player.getPosY() + player.getHeight(), player.getPosZ());
BlockState state = player.world.getBlockState(pos);
if (state != null && state.isSideSolid(player.world, pos, Direction.DOWN)) {
if (state.isSolidSide(player.world, pos, Direction.DOWN)) {
deductTime = 10;
}
}
@ -177,7 +175,7 @@ public class ItemWingsOfTheBats extends ItemBase {
if (deductTime > 0) {
data.batWingsFlyTime = Math.max(0, data.batWingsFlyTime - deductTime);
if (player.world.getTotalWorldTime() % 10 == 0) {
if (player.world.getWorldInfo().getGameTime() % 10 == 0) {
shouldSend = true;
}
}
@ -189,21 +187,16 @@ public class ItemWingsOfTheBats extends ItemBase {
}
} else {
if (data.hasBatWings) {
player.capabilities.allowFlying = true;
player.abilities.allowFlying = true;
} else if (data.shouldDisableBatWings) { //so that other modded flying won't be disabled
data.shouldDisableBatWings = false;
player.capabilities.allowFlying = false;
player.capabilities.isFlying = false;
player.capabilities.disableDamage = false;
player.abilities.allowFlying = false;
player.abilities.isFlying = false;
player.abilities.disableDamage = false;
}
}
}
}
}
@Override
public EnumRarity getRarity(ItemStack stack) {
return EnumRarity.EPIC;
}
}

View File

@ -81,7 +81,6 @@ public class ClientProxy {
// COLOR_PRODIVIDING_BLOCKS_FOR_REGISTERING.add(block);
// }
@Deprecated
public static ClientPlayerEntity getCurrentPlayer() {
return Minecraft.getInstance().player;
}

View File

@ -174,7 +174,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable {
// @Override
// public ITextComponent getDisplayName() {
// return new TextComponentTranslation(this.getNameForTranslation());
// return new TranslationTextComponent(this.getNameForTranslation());
// }