Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.negafinity.cratereloaded.event;
- import com.google.common.collect.Lists;
- import com.negafinity.cratereloaded.CrateReloaded;
- import com.negafinity.cratereloaded.command.RewardListItem;
- import com.negafinity.cratereloaded.command.RewardListItem.RewardType;
- import com.negafinity.cratereloaded.command.YAMLCoordinates;
- import net.minecraft.block.BlockChest;
- import net.minecraft.command.ICommandManager;
- import net.minecraft.enchantment.Enchantment;
- import net.minecraft.entity.player.EntityPlayer;
- import net.minecraft.entity.player.EntityPlayerMP;
- import net.minecraft.init.Blocks;
- import net.minecraft.init.SoundEvents;
- import net.minecraft.item.ItemStack;
- import net.minecraft.nbt.NBTTagCompound;
- import net.minecraft.nbt.NBTTagList;
- import net.minecraft.nbt.NBTTagString;
- import net.minecraft.network.play.server.SPacketEntityVelocity;
- import net.minecraft.tileentity.TileEntityChest;
- import net.minecraft.util.EnumHand;
- import net.minecraft.util.EnumParticleTypes;
- import net.minecraft.util.ResourceLocation;
- import net.minecraft.util.SoundCategory;
- import net.minecraft.util.SoundEvent;
- import net.minecraft.util.math.BlockPos;
- import net.minecraft.util.text.TextComponentString;
- import net.minecraft.util.text.TextFormatting;
- import net.minecraft.world.World;
- import net.minecraft.world.WorldServer;
- import net.minecraftforge.event.entity.player.PlayerInteractEvent;
- import net.minecraftforge.event.world.BlockEvent;
- import net.minecraftforge.fml.common.FMLCommonHandler;
- import net.minecraftforge.fml.common.eventhandler.EventPriority;
- import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Random;
- public class EventHandler
- {
- @SubscribeEvent(priority = EventPriority.LOWEST)
- public void rightClickEvent(PlayerInteractEvent event)
- {
- ItemStack stack = event.getEntityPlayer().getHeldItem(EnumHand.MAIN_HAND);
- if (stack != null)
- {
- if (stack.hasTagCompound())
- {
- if (stack.getTagCompound().hasKey("IsCrate"))
- {
- giveRewardsForMysteryCrate(event, stack);
- }
- else if (stack.getTagCompound().hasKey("IsCrateKey"))
- {
- giveRewardsFromKey(event, stack);
- }
- }
- }
- if (event instanceof PlayerInteractEvent.LeftClickBlock)
- {
- if (showRewards(event.getPos(), event.getWorld(), (EntityPlayerMP) event.getEntityPlayer()))
- {
- event.setCanceled(true);
- }
- }
- else if (event instanceof PlayerInteractEvent.RightClickBlock)
- {
- BlockPos pos = event.getPos();
- for (String crateName : CrateReloaded.instance.getCratesOfType("KEYCRATE"))
- {
- YAMLCoordinates yaml = new YAMLCoordinates(pos.getX(), pos.getY(), pos.getZ(), event.getWorld().provider.getDimension());
- if (CrateReloaded.instance.getValuesOfChildrenOfKeyLocations("Locations", crateName).contains(yaml.forYAML()))
- {
- event.setCanceled(true);
- }
- }
- }
- }
- @SubscribeEvent
- public void blockBreak(BlockEvent.BreakEvent event)
- {
- if (showRewards(event.getPos(), event.getWorld(), (EntityPlayerMP) event.getPlayer()))
- {
- event.setCanceled(true);
- }
- }
- public static double round(double value, int places)
- {
- if (places < 0)
- throw new IllegalArgumentException();
- BigDecimal bd = new BigDecimal(value);
- bd = bd.setScale(places, RoundingMode.HALF_UP);
- return bd.doubleValue();
- }
- public EnumParticleTypes getParticleFromName(String name)
- {
- for (int i = 0; i < EnumParticleTypes.getParticleNames().size(); i++)
- {
- String s = Lists.newArrayList(EnumParticleTypes.getParticleNames()).get(i);
- if (s.equals(name))
- {
- return EnumParticleTypes.getParticleFromId(i);
- }
- }
- return null;
- }
- public void giveRewardsForMysteryCrate(PlayerInteractEvent event, ItemStack stack)
- {
- if (event instanceof PlayerInteractEvent.RightClickItem)
- {
- giveRewards(event, stack, false);
- }
- }
- public void giveRewardsFromKey(PlayerInteractEvent event, ItemStack stack)
- {
- if (event instanceof PlayerInteractEvent.RightClickBlock)
- {
- BlockPos pos = event.getPos();
- String crateName = stack.getTagCompound().getString("CrateName");
- YAMLCoordinates yaml = new YAMLCoordinates(pos.getX(), pos.getY(), pos.getZ(), event.getWorld().provider.getDimension());
- if (CrateReloaded.instance.getValuesOfChildrenOfKeyLocations("Locations", crateName).contains(yaml.forYAML()))
- {
- giveRewards(event, stack, true);
- }
- else
- {
- event.getEntityPlayer().addChatComponentMessage(new TextComponentString(CrateReloaded.prefix + "This is not a designated crate for this key!"));
- if (CrateReloaded.instance.getConfig().isPushBackEnabled())
- {
- event.getEntityPlayer().addVelocity(1, 1, 1);
- ((EntityPlayerMP) event.getEntityPlayer()).connection.sendPacket(new SPacketEntityVelocity(event.getEntityPlayer()));
- }
- event.setCanceled(true);
- }
- }
- }
- public static List<RewardListItem> getRewardsFromList(List<String> listItemsInput)
- {
- List<RewardListItem> rewards = new ArrayList<RewardListItem>();
- for (String s : listItemsInput)
- {
- listItemsInput.set(listItemsInput.indexOf(s), s.replace("&", "\u00A7"));
- RewardListItem reward = new RewardListItem(s);
- rewards.add(reward);
- }
- return rewards;
- }
- public void giveRewards(PlayerInteractEvent event, ItemStack stack, boolean isBlock)
- {
- String crateName = stack.getTagCompound().getString("CrateName");
- ArrayList<RewardListItem> rewards = new ArrayList<RewardListItem>();
- List<String> rewardInput = CrateReloaded.instance.getValuesOfChildrenOfKey(crateName, "reward", "rewards");
- for (String s : rewardInput)
- {
- RewardListItem rli = new RewardListItem(s);
- rewards.add(rli);
- }
- ArrayList<RewardListItem> rewardsToGive = new ArrayList<RewardListItem>();
- double totalWeight = 0;
- for (RewardListItem reward : rewards)
- {
- totalWeight += reward.getChance();
- }
- String minNumRewardsInput = CrateReloaded.instance.getValueOfKey(crateName + ".reward.minimumRewards").toString();
- String maxNumRewardsInput = CrateReloaded.instance.getValueOfKey(crateName + ".reward.maximumRewards").toString();
- int minNumRewards = Integer.parseInt(minNumRewardsInput);
- int maxNumRewards = Integer.parseInt(maxNumRewardsInput);
- int numRewardsToGive = new Random().nextInt((maxNumRewards - minNumRewards) + 1) + minNumRewards;
- for (int j = 0; j < numRewardsToGive; j++)
- {
- RewardListItem rewardToGive = null;
- int randomIndex = -1;
- while (rewardToGive == null || (!rewardToGive.duplicates() && rewardsToGive.contains(rewardToGive)))
- {
- randomIndex = -1;
- double random = Math.random() * totalWeight;
- for (int i = 0; i < rewards.size(); i++)
- {
- random -= rewards.get(i).getChance();
- if (random <= 0)
- {
- randomIndex = i;
- break;
- }
- }
- rewardToGive = rewards.get(randomIndex);
- }
- rewardsToGive.add(rewards.get(randomIndex));
- }
- for (RewardListItem reward : rewardsToGive)
- {
- if (reward.getRewardType() == RewardType.ITEM)
- {
- // Where the actual item is created
- ItemStack is = new ItemStack(reward.getItem(), reward.getAmount(), reward.getMeta());
- is.setTagCompound(new NBTTagCompound());
- // Add modifiers here
- for (int id : reward.getEnchantmentIdSet())
- {
- is.addEnchantment(Enchantment.getEnchantmentByID(id), reward.getLevelOfEnchantment(id));
- }
- NBTTagCompound display = new NBTTagCompound();
- NBTTagList lore = new NBTTagList();
- if (!reward.getItemLore().equals(""))
- {
- lore.appendTag(new NBTTagString(reward.getItemLore()));
- }
- display.setTag("Lore", lore);
- is.getTagCompound().setTag("display", display);
- if (!reward.getCustomName().equals(""))
- {
- is.setStackDisplayName(reward.getCustomName());
- }
- // ITEM STUFF
- event.getEntityPlayer().inventory.addItemStackToInventory(is);
- if (reward.hasOtherItems())
- {
- for (int i = 0; i < reward.getNumberOfOtherItems(); i++)
- {
- ItemStack is2 = new ItemStack(reward.otherItem(i), reward.otherAmount(i), reward.otherMeta(i));
- is2.setTagCompound(new NBTTagCompound());
- // Add modifiers here
- for (int id : reward.getOtherEnchantmentIdSet(i))
- {
- is2.addEnchantment(Enchantment.getEnchantmentByID(id), reward.getLevelOfOtherEnchantment(i, id));
- }
- NBTTagCompound display2 = new NBTTagCompound();
- NBTTagList lore2 = new NBTTagList();
- if (reward.hasOtherLore(i))
- {
- lore2.appendTag(new NBTTagString(reward.getOtherLore(i)));
- }
- display2.setTag("Lore", lore2);
- is2.getTagCompound().setTag("display", display2);
- if (reward.hasOtherCustomName(i))
- {
- is2.setStackDisplayName(reward.getOtherName(i));
- }
- event.getEntityPlayer().inventory.addItemStackToInventory(is2);
- }
- }
- event.getEntityPlayer().worldObj.playSound(event.getEntityPlayer(), event.getEntityPlayer().getPosition(), SoundEvents.BLOCK_LAVA_POP, SoundCategory.AMBIENT, 0.2F, ((event.getEntityPlayer().getRNG().nextFloat() - event.getEntityPlayer().getRNG().nextFloat()) * 0.7F + 1.0F) * 2.0F);
- event.getEntityPlayer().inventoryContainer.detectAndSendChanges();
- }
- else
- {
- if (!event.getWorld().isRemote)
- {
- ICommandManager handler = FMLCommonHandler.instance().getSidedDelegate().getServer().getCommandManager();
- handler.executeCommand(FMLCommonHandler.instance().getSidedDelegate().getServer(), reward.getCommand().replace("%player%", event.getEntityPlayer().getName()).replace("%x%", event.getEntityPlayer().posX + "").replace("%y%", event.getEntityPlayer().posY + "").replace("%z%", event.getEntityPlayer().posZ + ""));
- if (reward.hasOtherCommands())
- {
- for (String command : reward.getOtherCommands())
- {
- handler.executeCommand(FMLCommonHandler.instance().getSidedDelegate().getServer(), command.replace("%player%", event.getEntityPlayer().getName()).replace("%x%", event.getEntityPlayer().posX + "").replace("%y%", event.getEntityPlayer().posY + "").replace("%z%", event.getEntityPlayer().posZ + ""));
- }
- }
- if (!reward.getCommandCompletionMessage().equals(""))
- {
- event.getEntityPlayer().addChatComponentMessage(new TextComponentString(CrateReloaded.prefix + TextFormatting.GRAY + reward.getCommandCompletionMessage()));
- }
- }
- }
- }
- System.out.println("Item before: " + event.getEntityPlayer().getHeldItemMainhand().getDisplayName());
- event.getEntityPlayer().inventory.decrStackSize(event.getEntityPlayer().inventory.currentItem, 1);
- event.getEntityPlayer().inventoryContainer.detectAndSendChanges();
- System.out.println("Item after: " + event.getEntityPlayer().getHeldItemMainhand());
- // PLAYER MESSAGE
- if (CrateReloaded.instance.hasKey("message", crateName))
- {
- if (CrateReloaded.instance.hasKey("onOpen", crateName, "message"))
- {
- String message = CrateReloaded.instance.getValueOfKey(crateName + ".message.onOpen").toString().replace("&", "\u00A7");
- if (!message.equals(""))
- {
- if (!event.getWorld().isRemote)
- {
- event.getEntityPlayer().addChatComponentMessage(new TextComponentString(CrateReloaded.prefix + message));
- }
- }
- }
- if (CrateReloaded.instance.hasKey("broadcast", crateName, "message"))
- {
- String s1 = CrateReloaded.instance.getValueOfKey(crateName + ".message.broadcast").toString();
- if (!s1.equals(""))
- {
- if (!event.getWorld().isRemote)
- {
- String s = s1.replaceAll("%player%", event.getEntityPlayer().getName()).replace("&", "\u00A7");
- FMLCommonHandler.instance().getSidedDelegate().getServer().addChatMessage(new TextComponentString(CrateReloaded.prefix + s));
- }
- }
- }
- }
- String[] openEffects = new String[0];
- if (CrateReloaded.instance.hasKey("onOpenEffects", crateName, "effect"))
- {
- openEffects = CrateReloaded.instance.getValueOfKey(crateName + ".effect.onOpenEffects").toString().split(",");
- }
- EntityPlayer player = event.getEntityPlayer();
- // PARTICLES
- for (String s : openEffects)
- {
- if (getParticleFromName(s.trim()) != null)
- {
- if (event.getWorld() instanceof WorldServer)
- {
- double posX = isBlock ? event.getPos().getX() + 0.5 : player.posX;
- double posY = isBlock ? event.getPos().getY() : player.posY;
- double posZ = isBlock ? event.getPos().getZ() + 0.5 : player.posZ;
- double offset = isBlock ? 0.4 : player.width * 0.4;
- ((WorldServer) event.getWorld()).spawnParticle(getParticleFromName(s.trim()), getParticleFromName(s.trim()).getShouldIgnoreRange(), posX, posY, posZ, 20, offset, 0.5, offset, 0.1, new int[0]);
- }
- }
- }
- // SOUNDS
- if (CrateReloaded.instance.hasKey("onOpenSounds", crateName, "effect"))
- {
- String[] openSounds = CrateReloaded.instance.getValueOfKey(crateName + ".effect.onOpenSounds").toString().split(",");
- for (String s : openSounds)
- {
- String[] id = s.trim().split(":");
- String modid = s.length() == 2 ? id[0] : "minecraft";
- String thing = s.length() == 2 ? id[1] : id[0];
- event.getWorld().playSound(player, player.getPosition(), SoundEvent.REGISTRY.getObject(new ResourceLocation(modid, thing)), SoundCategory.AMBIENT, 1f, 1f);
- }
- }
- event.setCanceled(true);
- }
- public boolean showRewards(BlockPos bpos, World world, EntityPlayerMP player)
- {
- BlockPos pos = bpos;
- int dimId = world.provider.getDimension();
- YAMLCoordinates yaml = new YAMLCoordinates(pos.getX(), pos.getY(), pos.getZ(), dimId);
- if (world.getBlockState(pos).getBlock() == Blocks.CHEST)
- {
- BlockChest chest = (BlockChest) world.getBlockState(pos).getBlock();
- for (String crateName : CrateReloaded.instance.getCratesOfType("KEYCRATE"))
- {
- if (CrateReloaded.instance.getValuesOfChildrenOfKeyLocations("Locations", crateName).contains(yaml.forYAML()))
- {
- if (CrateReloaded.instance.hasKey("preview", crateName))
- {
- if (CrateReloaded.instance.getValueOfKey(crateName, "preview", "enabled").toString().equalsIgnoreCase("true"))
- {
- TileEntityChest te = (TileEntityChest) world.getTileEntity(pos);
- te.clear();
- if (CrateReloaded.instance.hasKey("displayName", crateName))
- {
- String s = CrateReloaded.instance.getValueOfKey(crateName, "displayName").toString().replace("&", "\u00A7");
- te.setCustomName(s);
- }
- List<RewardListItem> RLIs = getRewardsFromList(CrateReloaded.instance.getValuesOfChildrenOfKey(crateName, "reward", "rewards"));
- int totalChance = 0;
- for (RewardListItem reward : RLIs)
- {
- totalChance += reward.getChance() * 100;
- }
- for (int i = 0; i < RLIs.size() && i < te.getSizeInventory(); i++)
- {
- RewardListItem reward = RLIs.get(i);
- if (reward.getRewardType() == RewardType.ITEM)
- {
- ItemStack is = new ItemStack(reward.getItem(), reward.getAmount(), reward.getMeta());
- is.setTagCompound(new NBTTagCompound());
- for (int id : reward.getEnchantmentIdSet())
- {
- is.addEnchantment(Enchantment.getEnchantmentByID(id), reward.getLevelOfEnchantment(id));
- }
- NBTTagCompound display = new NBTTagCompound();
- NBTTagList lore = new NBTTagList();
- if (reward.hasLore())
- {
- lore.appendTag(new NBTTagString(reward.getItemLore()));
- }
- display.setTag("Lore", lore);
- is.getTagCompound().setTag("display", display);
- if (reward.hasCustomName())
- {
- is.setStackDisplayName(reward.getCustomName());
- }
- te.setInventorySlotContents(i, is);
- }
- else
- {
- ItemStack display = reward.getCommandDisplayItem();
- te.setInventorySlotContents(i, reward.getCommandDisplayItem());
- }
- }
- try
- {
- Utils.displayInventory(player, player.inventory, te);
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- }
- return true;
- }
- }
- }
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement