Add Custom sentence when boy milk is drain.

Correct absorption not given
This commit is contained in:
Trollfury21
2025-07-21 17:52:49 +02:00
parent 45f49ba76d
commit 3e70f8347b
18 changed files with 168 additions and 7 deletions

Binary file not shown.

Binary file not shown.

1
.idea/gradle.xml generated
View File

@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>

View File

@@ -4,7 +4,7 @@ plugins {
}
group = 'fr.trollfury'
version = '1.0'
version = '1.3'
repositories {
mavenCentral()

Binary file not shown.

View File

@@ -0,0 +1 @@
{"stats":{"minecraft:picked_up":{"minecraft:andesite":1,"minecraft:granite":4,"minecraft:iron_ore":9,"minecraft:diorite":3,"minecraft:redstone":27,"minecraft:iron_sword":1,"minecraft:dirt":17,"minecraft:cobblestone":83},"minecraft:dropped":{"minecraft:iron_sword":1},"minecraft:used":{"minecraft:cobblestone":1,"minecraft:iron_pickaxe":110},"minecraft:custom":{"minecraft:time_since_rest":26439,"minecraft:open_chest":26,"minecraft:play_one_minute":26439,"minecraft:interact_with_furnace":4,"minecraft:damage_taken":105,"minecraft:walk_one_cm":78683,"minecraft:walk_under_water_one_cm":612,"minecraft:drop":1,"minecraft:jump":74,"minecraft:leave_game":2,"minecraft:walk_on_water_one_cm":7041,"minecraft:time_since_death":26439,"minecraft:climb_one_cm":107,"minecraft:swim_one_cm":647,"minecraft:fall_one_cm":1762,"minecraft:fly_one_cm":770},"minecraft:mined":{"minecraft:granite":4,"minecraft:redstone_ore":6,"minecraft:dirt":17,"minecraft:iron_ore":9,"minecraft:stone":83,"minecraft:andesite":1,"minecraft:diorite":3}},"DataVersion":1631}

View File

@@ -1,7 +1,10 @@
package fr.trollfury.femboy;
import fr.trollfury.femboy.commands.PingCommand;
import fr.trollfury.femboy.commands.UpdateScoreboard;
import fr.trollfury.femboy.listeners.BoyMilkListeners;
import fr.trollfury.femboy.listeners.BoyMilkDrinkedListener;
import fr.trollfury.femboy.utils.CustomSentenceBoyMilk;
import org.bukkit.plugin.java.JavaPlugin;
public final class Main extends JavaPlugin {
@@ -10,6 +13,9 @@ public final class Main extends JavaPlugin {
public void onEnable() {
getCommand("ping").setExecutor(new PingCommand());
getServer().getPluginManager().registerEvents(new BoyMilkListeners(), this);
getServer().getPluginManager().registerEvents(new BoyMilkDrinkedListener(), this);
getCommand("updatescoreboard").setExecutor(new UpdateScoreboard());
getCommand("updatescoreboard").setTabCompleter(new UpdateScoreboard());
}
@Override

View File

@@ -0,0 +1,102 @@
package fr.trollfury.femboy.commands;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.Statistic;
import org.bukkit.command.*;
import org.bukkit.entity.Player;
import org.bukkit.scoreboard.Objective;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class UpdateScoreboard implements CommandExecutor, TabExecutor {
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
if(sender instanceof Player){
Player p = (Player) sender;
if(args.length > 1) {
return false;
}
if(args.length == 1) {
switch (args[0].toLowerCase()) {
case "beacon":
Arrays.stream(p.getServer().getOfflinePlayers()).toList().forEach(oPLayer -> {
int beaconStat = oPLayer.getStatistic(Statistic.CRAFT_ITEM, Material.BEACON);
if(oPLayer.getName() != null) {
if(p.getScoreboard().getObjective("rwby").getScore(oPLayer.getName()) != null) {
p.getScoreboard().getObjective("rwby").getScore(oPLayer.getName()).setScore(beaconStat);
}
}
});
p.getWorld().getPlayers().forEach(player -> {
int beaconStat = player.getStatistic(Statistic.CRAFT_ITEM, Material.BEACON);
player.getScoreboard().getObjective("rwby").getScore(player.getName()).setScore(beaconStat);
});
break;
case "netherite":
Arrays.stream(p.getServer().getOfflinePlayers()).toList().forEach(oPLayer -> {
int beaconStat = oPLayer.getStatistic(Statistic.MINE_BLOCK, Material.ANCIENT_DEBRIS);
if(oPLayer.getName() != null) {
if(p.getScoreboard().getObjective("netherite").getScore(oPLayer.getName()) != null) {
p.getScoreboard().getObjective("netherite").getScore(oPLayer.getName()).setScore(beaconStat);
}
}
});
p.getWorld().getPlayers().forEach(player -> {
int beaconStat = player.getStatistic(Statistic.MINE_BLOCK, Material.ANCIENT_DEBRIS);
player.getScoreboard().getObjective("netherite").getScore(player.getName()).setScore(beaconStat);
});
break;
case "rolex":
Arrays.stream(p.getServer().getOfflinePlayers()).toList().forEach(oPLayer -> {
int beaconStat = oPLayer.getStatistic(Statistic.CRAFT_ITEM, Material.DIAMOND_HOE);
if(oPLayer.getName() != null) {
if(p.getScoreboard().getObjective("netherite").getScore(oPLayer.getName()) != null) {
p.getScoreboard().getObjective("netherite").getScore(oPLayer.getName()).setScore(beaconStat);
}
}
});
p.getWorld().getPlayers().forEach(player -> {
int beaconStat = player.getStatistic(Statistic.CRAFT_ITEM, Material.DIAMOND_HOE);
player.getScoreboard().getObjective("rolex").getScore(player.getName()).setScore(beaconStat);
});
break;
case "time":
Arrays.stream(p.getServer().getOfflinePlayers()).toList().forEach(oPLayer -> {
int beaconStat = oPLayer.getStatistic(Statistic.TOTAL_WORLD_TIME);
if(oPLayer.getName() != null) {
if(p.getScoreboard().getObjective("total_time").getScore(oPLayer.getName()) != null) {
p.getScoreboard().getObjective("total_time").getScore(oPLayer.getName()).setScore(beaconStat);
}
}
});
p.getWorld().getPlayers().forEach(player -> {
int beaconStat = player.getStatistic(Statistic.TOTAL_WORLD_TIME);
player.getScoreboard().getObjective("total_time").getScore(player.getName()).setScore(beaconStat);
});
break;
default:break;
}
}
return true;
} else sender.sendMessage("Cette commande ne peux pas etre effectuer en console.");
return false;
}
@Nullable
@Override
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
if(args.length == 1) {
return Arrays.asList("beacon","netherite","rolex","time");
}
return new ArrayList<>();
}
}

View File

@@ -1,19 +1,18 @@
package fr.trollfury.femboy.listeners;
import fr.trollfury.femboy.utils.CustomSentenceBoyMilk;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractAtEntityEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.Collections;
import java.util.List;
public class BoyMilkListeners implements Listener {
@@ -28,14 +27,22 @@ public class BoyMilkListeners implements Listener {
ItemStack item = new ItemStack(Material.MILK_BUCKET);
ItemMeta meta = item.getItemMeta();
meta.setItemName("§dBoy Milk");
meta.setLore(Collections.singletonList("Semence récupérée sur §b§o" + target.getPlayer().getDisplayName()));
meta.setLore(Collections.singletonList("Récupérée sur §b§o" + target.getPlayer().getDisplayName()));
meta.addEnchant(Enchantment.INFINITY, 1, true);
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
item.setItemMeta(meta);
p.getItemInHand().setAmount(p.getItemInHand().getAmount() - 1);
p.getInventory().addItem(item);
p.getServer().broadcastMessage("§d§o" + p.getName() + " a récupéré quelque chose sur " + target.getName());
p.getServer().getWorlds().forEach(world -> {
world.getPlayers().forEach(player -> {
player.sendMessage("§d§o" + p.getName() + " a récupéré quelque chose sur " + target.getName());
CustomSentenceBoyMilk customSentence = new CustomSentenceBoyMilk();
customSentence.setupCustomSentence();
player.sendMessage(customSentence.getRandomSentence());
});
});
break;
default:break;
}

View File

@@ -0,0 +1,41 @@
package fr.trollfury.femboy.utils;
import java.util.ArrayList;
import java.util.List;
public class CustomSentenceBoyMilk {
private List<String> customSentence = new ArrayList<>();
public void CustomSentenceBoyMilk() {}
public List<String> getList() {
return customSentence;
}
public void addList(String sentence) {
customSentence.add(sentence);
}
public String getRandomSentence() {
int n = (int)(Math.random() * this.customSentence.size());
return this.customSentence.get(n);
}
public void setupCustomSentence() {
this.addList("§d§oChat is it gay drain boy milk from my homies ?");
this.addList("§d§oIs it gay if I kiss my homies but I'm wearing socks ?");
this.addList("§d§oIs it gay if I like femboy on my social media feed ?");
this.addList("§d§oYou like female ? Don't forget there are male in fe§nmale§r§d§o. Think about it");
this.addList("§d§o§c#§6g§ea§ay §b#§3l§9e§1s§5b§di§ca§6n §e#§ab§bi§3s§9e§1x§5u§da§cl §dAll the gay hashtags are rainbow. Now Watch #kissingTheHommiesGoodNight See it's not gay !");
this.addList("§d§oAs long as you're wearing thigh highs...");
this.addList("§d§oAin't gay if the programming socks are on !");
this.addList("§d§oYou like kissing boys don't you?");
this.addList("§d§oBoys makes the best girls :3");
this.addList("§d§oThere's 'male' in 'female', think about it you GAY");
this.addList("§d§oProgramming socks are high, 'cuz it's for blood circulation.");
this.addList("§d§oY-you want b-boi m-milk?? >w<");
this.addList("§d§oSir, this is a Femboy Hooters !");
this.addList("§d§oDEMOCRATS are turning the frogs GAY!");
this.addList("§d§oCan I have a cup of your *special* milk?");
}
}

View File

@@ -2,5 +2,5 @@ package fr.trollfury.femboy.utils;
public class Reference {
public static final String NAME = "Femboy";
public static final String VERSION = "1.0";
public static final String VERSION = "1.3";
}

View File

@@ -1,8 +1,11 @@
name: femboy
version: '1.0'
version: '1.3'
main: fr.trollfury.femboy.Main
api-version: '1.21'
commands:
ping:
description: "Commande par defaut"
usage: /<command>
updatescoreboard:
description: "Actualiser les scoreboard directement avec les stats de chaque personne"
usage: /<command>