codename_B's list of plugins under 50 lines of code AKA the under 50 challenge

Discussion in 'Resources' started by codename_B, Aug 23, 2011.

Thread Status:
Not open for further replies.
  1. Offline

    lclc98

    Not able to change terrain
    17 lines

    Code:
    package me.lclc98.Cat;
     
    public class Main extends org.bukkit.plugin.java.JavaPlugin implements org.bukkit.event.Listener{
    org.bukkit.plugin.PluginDescriptionFile pdfFile = this.getDescription();
    public void onEnable() {}
    public void onDisable() {
    java.util.logging.Logger log = java.util.logging.Logger.getLogger("Minecraft");log.info("Cat has been disabled.");}
    @org.bukkit.event.EventHandler
    public void onBreak(org.bukkit.event.block.BlockBreakEvent event) {
    org.bukkit.entity.Player player = event.getPlayer();
    if(player.isOp()) {event.setCancelled(false);}
    else{event.setCancelled(true);}    }
    @org.bukkit.event.EventHandler
    public void onPlace(org.bukkit.event.block.BlockPlaceEvent event) {
    org.bukkit.entity.Player player = event.getPlayer();
    if(player.isOp()) {event.setCancelled(false);}
    else{event.setCancelled(true);}}  } 
     
  2. lclc98 Comeone, don't cheat... Also your code won't run.
    Code:java
    1. package me.lclc98.Cat;
    2. import org.bukkit.plugin.java.JavaPlugin;
    3. import org.bukkit.event.Listener;
    4. import org.bukkit.event.block.BlockBreakEvent;
    5. import org.bukkit.event.block.BlockPlaceEvent;
    6. import org.bukkit.event.EventHandler;
    7. public class Main JavaPlugin implements Listener {
    8. public void onEnable() {
    9. getServer().getPluginManager().registerEvents(this, this);
    10. }
    11. @EventHandler(ignoreCancelled = true)
    12. public void onBreak(BlockBreakEvent event) {
    13. if(!event.getPlayer().isOp()) event.setCancelled(true);
    14. }
    15. @EventHandler(ignoreCancelled = true)
    16. public void onPlace(BlockPlaceEvent event) {
    17. if(!event.getPlayer().isOp()) event.setCancelled(true);
    18. }
    19. }

    Readable, working code with just 2 more lines...
     
  3. Offline

    codename_B

    Ahh, I haven't taken part in this for a while... wonder what I shall do.

    Maybe an afk kicker?
     
  4. Offline

    Gravity

    If I remember correctly someone already posted one of those
     
  5. Offline

    codename_B

    Ah ok. *gets creative hat on*
     
  6. Offline

    Deathmarine

    MobFriends -Players are not attacked by mobs unless provoked.
    Code:java
    1.  
    2. package com.modcrafting.mobfriends;
    3.  
    4. import java.util.HashMap;
    5. import java.util.Iterator;
    6.  
    7. import org.bukkit.entity.Entity;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.event.EventHandler;
    10. import org.bukkit.event.Listener;
    11. import org.bukkit.event.entity.EntityDamageEvent;
    12. import org.bukkit.event.entity.EntityDeathEvent;
    13. import org.bukkit.event.entity.EntityTargetEvent;
    14. import org.bukkit.plugin.java.JavaPlugin;
    15.  
    16. public class MobFriends extends JavaPlugin implements Listener{
    17. HashMap<Entity, Player> lists = new HashMap<Entity, Player>();
    18. public void onEnable(){
    19. this.getServer().getPluginManager().registerEvents(this, this);
    20. }
    21. @EventHandler
    22. public void onEntityTarget(EntityTargetEvent event){
    23. if(event.getTarget() instanceof Player && !((Player) event.getTarget()).hasPermission("mobfriends.use")) return;
    24. if(lists.size() > (this.getServer().getMaxPlayers()*4)) lists.clear();
    25. if(lists.containsKey(event.getEntity())){
    26. if(event.getTarget() == null){
    27. lists.remove(event.getEntity());
    28. return;
    29. }
    30. if(event.getTarget().equals(lists.get(event.getTarget()))) return;
    31. }else{
    32. event.setCancelled(true);
    33. }
    34. }
    35. @EventHandler
    36. public void onEntityDamage(EntityDamageEvent event){
    37. if((!(event.getEntity() instanceof Player)) && !lists.containsKey(event.getEntity())){
    38. Iterator<Entity> entities = event.getEntity().getNearbyEntities(10, 10, 10).iterator();
    39. while(entities.hasNext()){
    40. Entity x = entities.next();
    41. if(x instanceof Player) lists.put(event.getEntity(),(Player) x);
    42. }
    43. event.setCancelled(true);
    44. }
    45. }
    46. @EventHandler
    47. public void onEntityDeath(EntityDeathEvent event){
    48. if(lists.containsKey(event.getEntity())) lists.remove(event.getEntity());
    49. }
    50. }
    51.  
     
  7. Offline

    ACStache

  8. *StealsTheHat* what about a MOTD plugin? This one sends a random MOTD or a banned message (only IP bans are counted):
    Code:java
    1. package de.V10lator.MOTDplug;
    2. import java.util.Random;
    3.  
    4. public class MOTDplug extends org.bukkit.plugin.java.JavaPlugin implements org.bukkit.event.Listener
    5. {
    6. private java.util.List<String> motds;
    7. private final Random rand = new Random();
    8.  
    9. public void onEnable() {
    10. load();
    11. getServer().getPluginManager().registerEvents(this, this);
    12. }
    13. public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) {
    14. if(!sender.hasPermission("motdplug.reload"))
    15. return true;
    16. load();
    17. sender.sendMessage("Reloaded!");
    18. return true;
    19. }
    20. @org.bukkit.event.EventHandler
    21. public void motd(org.bukkit.event.server.ServerListPingEvent event) {
    22. String motd;
    23. if(getServer().getIPBans().contains(event.getAddress().getHostAddress()))
    24. motd = getConfig().getString("Banned");
    25. else
    26. motd = motds.get(rand.nextInt(motds.size()));
    27. event.setMotd(motd);
    28. }
    29. private void load() {
    30. reloadConfig();
    31. if(!getConfig().isSet("Banned") || !getConfig().isSet("MOTDs"))
    32. saveDefaultConfig();
    33. motds = getConfig().getStringList("MOTDs");
    34. if(motds.isEmpty())
    35. motds.add(getServer().getServerName());
    36. }
    37. }

    Code:java
    1. name: MOTDplug
    2. Author: V10lator
    3. main: de.V10lator.MOTDplug.MOTDplug
    4. version: 0.1
    5. commands:
    6. motdreload:
    7. description: Reload the configuration.
    8. usage: <command>
    9. permissions:
    10. motdplug.reload:
    11. description: Reload the configuration.
    12. default: op

    I would use more imports and other stuff, but I'm not sure if the plugin.yml counts to the 50 lines or not (in the past it did not, but now it seems like.).
    BTW: The plugin is > 50 lines if you count in the config.yml:
    Code:java
    1. Banned: You are banned at this server!
    2. MOTDs:
    3. - Welcome to my awesome server!
    4. - Now with 50% more awesomeness!

    So we really need to know what counts, only class files or everything in the jar ( codename_B )?
     
  9. Offline

    codename_B

    Only the class files.

    plugin.yml can be any size you want.

    The limit is one class file, 50 lines.
     
    Fishrock123 and V10lator like this.
  10. So you can post any number of classes ? :p :))
     
  11. Offline

    codename_B

    No, by one class file, I mean one class file. Tops.
     
  12. Offline

    Deathmarine

    lol.. I made something like this 7 months ago. https://github.com/deathmarine/PingMOTD
    But I found out something about notch dying from the source.

    Code:java
    1.  
    2. package com.modcrafting.notchdeathapplespam;
    3.  
    4. import org.bukkit.Material;
    5. import org.bukkit.entity.Player;
    6. import org.bukkit.event.EventHandler;
    7. import org.bukkit.event.Listener;
    8. import org.bukkit.event.entity.PlayerDeathEvent;
    9. import org.bukkit.inventory.ItemStack;
    10. import org.bukkit.plugin.java.JavaPlugin;
    11.  
    12. public class NotchDeathAppleSpam extends JavaPlugin implements Listener{
    13. boolean started = false;
    14. public void onEnable(){
    15. this.getServer().getPluginManager().registerEvents(this, this);
    16. }
    17. @EventHandler()
    18. public void onPlayerDeath(PlayerDeathEvent event){
    19. if(event.getEntity().getName().equalsIgnoreCase("notch")){
    20. if(!started) startTheAppleHell(event.getEntity().getName());
    21. }
    22. }
    23. private void startTheAppleHell(String name) {
    24. final Player notch = this.getServer().getPlayer(name);
    25. this.getServer().getScheduler().scheduleAsyncRepeatingTask(this,new Runnable(){
    26. @Override
    27. public void run() {
    28. if(notch == null) return;
    29. if(notch.isDead()) return;
    30. notch.getInventory().addItem(new ItemStack(Material.APPLE, 64));
    31. notch.damage(1);
    32. }
    33.  
    34. }, 0, 5L);
    35. }
    36. }
    37.  

    if notch dies he gets an apple and doesn't die in the source. I figure why did he just give himself one apple. I'll give him a whole bunch. Troll the troll.
    God I'm bored...
     
    V10lator likes this.
  13. But yours is > 50 lines. ;) Also it doesn't check for IP bans and contains useless stuff like
    event.setMotd(event.getMotd());
     
  14. Offline

    Deathmarine

    True. lol.
     
  15. Offline

    Jacek

    I made FlowerBomb for the old thread, it got left out here so here is an update in 29 lines with no cheating :)

    Code:
    package uk.co.jacekk.bukkit.flowerbomb;
    
    import org.bukkit.Material;
    import org.bukkit.block.Block;
    import org.bukkit.block.BlockFace;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityExplodeEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class FlowerBomb extends JavaPlugin implements Listener {
        
        public void onEnable(){
            this.getServer().getPluginManager().registerEvents(this, this);
        }
        
        @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
        public void onEntityExplode(EntityExplodeEvent event){
            for (Block block : event.blockList()){
                if (block.getType() == Material.GRASS){
                    block.getRelative(BlockFace.UP).setType((Math.random() < 0.5) ? Material.RED_ROSE : Material.YELLOW_FLOWER);
                }
            }
            
            event.setCancelled(true);
        }
        
    }
     
  16. Offline

    PandazNWafflez

    Better Version:

    Code:
    package uk.co.jacekk.bukkit.flowerbomb;
     
    import org.bukkit.Material;
    import org.bukkit.block.Block;
    import org.bukkit.block.BlockFace;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityExplodeEvent;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class FlowerBomb extends JavaPlugin {
     
        public void onEnable(){
            this.getServer().getPluginManager().registerEvents(new Listener() {
                @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
                public void onEntityExplode(EntityExplodeEvent event) {
                    for (Block block : event.blockList()) {
                        if (block.getType() == Material.GRASS)
                            block.getRelative(BlockFace.UP).setType((Math.random() < 0.5) ? Material.RED_ROSE : Material.YELLOW_FLOWER);
                      }
                event.setCancelled(true);
                }   
            }, this);
        }
     
    }
     
  17. Offline

    Jacek

    Why is that better ? :s
     
  18. Offline

    PandazNWafflez

    Smaller.
     
  19. Offline

    Jacek

    Since when has smaller been better ?
     
  20. Offline

    PandazNWafflez

    *Facepalm*
     
  21. Offline

    Jacek

    That was meant to be a joke...

    But seriously why is your version better ? Do you mean in terms of the game of making short plugins ? Or in terms of Java ? :s
     
  22. You're only checking of below block is grass, you're not checking what's above... so you're kinda overwriting other blocks :)
     
  23. Offline

    Jacek

    I knew someone would pick that up ! Generally grass won't be below anything since it dies, but FINE !

    Code:
    package uk.co.jacekk.bukkit.flowerbomb;
    
    import org.bukkit.Material;
    import org.bukkit.block.Block;
    import org.bukkit.block.BlockFace;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityExplodeEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class FlowerBomb extends JavaPlugin implements Listener {
        
        public void onEnable(){
            this.getServer().getPluginManager().registerEvents(this, this);
        }
        
        @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
        public void onEntityExplode(EntityExplodeEvent event){
            for (Block block : event.blockList()){
                Block above = block.getRelative(BlockFace.UP);
                
                if (block.getType() == Material.GRASS && above.getType() == Material.AIR && Math.random() < 0.4){
                    above.setType((Math.random() < 0.5) ? Material.RED_ROSE : Material.YELLOW_FLOWER);
                }
            }
            
            event.setCancelled(true);
        }
        
    }
     
  24. Jacek
    Yes it does... fences, chests, stairs, etc do not turn grass under them to dirt... there's also the delay before the grass dies, so it's a problem you can't afford to have.

    Also, you should check getType() before using getRelative(), would avoid executing pointless code :p
    Code:
    if(block.getType() == Material.GRASS)
    {
        Block above = block.getRelative(BlockFace.UP);
    
        if(above.getType() == Material.AIR && Math.random() < 0.4)
            above.setType(Math.random() < 0.5 ? Material.RED_ROSE : Material.YELLOW_FLOWER);
    }
     
  25. Offline

    Cirno

    I know this isn't a plugin, but it's exactly 48 lines. No cheating.
    It's basically a hasher application I created. It just hashes only to MD2 to SHA-512.
    Code:JAVA
    1. package cirno.iciclefall;
    2.  
    3. import javax.swing.*;
    4. import java.awt.event.*;
    5. import java.awt.*;
    6. import java.math.BigInteger;
    7. import java.security.*;
    8.  
    9. public class easy extends JFrame implements ActionListener {
    10. private static final long serialVersionUID = 6198850120644391726L;
    11. String[] alg = {"MD2","MD5","SHA-1","SHA-256","SHA-384","SHA-512"};
    12. private final int WIDTH = 1000, HEIGHT = 200;
    13. private JComboBox combobreaker = new JComboBox(alg);
    14. final JTextField hashString = new JTextField("String goes here!");
    15. final JTextField digestedString = new JTextField(buildString(hashString.getText(), "MD5"), 10);
    16. final JButton batton = new JButton("Hash it!");
    17.  
    18. private String buildString(String s, String q) throws Exception {
    19. MessageDigest.getInstance(q).reset();
    20. MessageDigest.getInstance(q).update(s.getBytes());
    21. return new BigInteger(1,MessageDigest.getInstance(q).digest()).toString(16);
    22. }
    23.  
    24. public easy() throws Exception{
    25. setTitle("Cirno's Perfect Hasher");
    26. setSize(WIDTH, HEIGHT);
    27. setVisible(true);
    28. setDefaultCloseOperation(EXIT_ON_CLOSE);
    29. combobreaker.setSelectedIndex(0);
    30. getContentPane().setLayout(new GridLayout(2, 4));
    31. getContentPane().add(digestedString);
    32. getContentPane().add(hashString);
    33. getContentPane().add(combobreaker);
    34. getContentPane().add(batton);
    35. batton.addActionListener(this);
    36. }
    37.  
    38. public static void main(String[] args) throws Exception{
    39. easy lol = new easy();
    40. lol.validate();
    41. }
    42.  
    43. public void actionPerformed(ActionEvent arg0) {
    44. try {
    45. digestedString.setText(buildString(hashString.getText().toString(), combobreaker.getSelectedItem().toString()));
    46. } catch (Exception e) {}
    47. }
    48. }


    EDIT: Now it's only 46 lines!
    EDIT2: It's 47 lines now; fixed the generated serial ID issue and the weird two boxes of emptiness.
    EDIT3: Fixed the button not doing anything. 48 lines. The numbers are getting bigger.
     
  26. Offline

    Fishrock123

    You can have as many classes as you like, so long as they fit in one class *file* and in 50 lines or under.
     
  27. Offline

    md_5

    That would be hashing not encrypting.
    I just use static inner classes.
     
  28. Offline

    Cirno

    I always get mixed up between the two...
    Fix'd.
     
  29. Offline

    Deleted user

    Can't you just technically put everything on one big line then o.o".
     
  30. Offline

    Fishrock123

    Yes, but that is cheating. :p
     
Thread Status:
Not open for further replies.

Share This Page