Skip to content

Commit

Permalink
Added new feature to require the dice to reroll.
Browse files Browse the repository at this point in the history
Added new Dice image.
Fixed dice rerolling twice.
Fixed being on fire after reroll if you were on fire (it's not perfect as lag will still make it possible).
Fixed reroll on death incorrectly having 'true' set in code for testing.
Adjusted reroll y position to potentially prevent players from being partially inside a block when they reroll.
  • Loading branch information
Dark-Arcana committed Mar 18, 2022
1 parent 74dfc23 commit 17054cc
Show file tree
Hide file tree
Showing 14 changed files with 102 additions and 46 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ apply plugin: 'net.minecraftforge.gradle'
apply plugin: 'maven-publish'
apply plugin: 'java'

version = '1.12.2-1.4.0'
version = '1.12.2-1.4.1'
group = 'com.smashingmods.reroll'
archivesBaseName = 'reroll'
sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8'
Expand Down
11 changes: 6 additions & 5 deletions changelog.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# Changes
- Added config options for rerolling on death, starting locked, cooldown timer for using the dice, sending your inventory into a chest, whether ender chest resets, etc.
- Added new Dice item that can be used to reroll.
- Modified initial inventory to include the dice.
- Set new defaults for config options.
- Added new feature to require the dice to reroll.
- Added new Dice image.
- Adjusted reroll y position to potentially prevent players from being partially inside a block when they reroll.

# Fixes
- Fixed issue where useCurrentDim and overrideDim weren't working. They should be now (unless I broke something since then).
- Fixed dice rerolling twice.
- Fixed being on fire after reroll if you were on fire (it's not perfect as lag will still make it possible).
- Fixed reroll on death incorrectly having 'true' set in code for testing.
2 changes: 1 addition & 1 deletion src/main/java/com/smashingmods/reroll/Reroll.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@

import java.io.File;

@Mod(modid = Reroll.MODID, version = "1.12.2-1.4.0", useMetadata = true)
@Mod(modid = Reroll.MODID, version = "1.12.2-1.4.1", useMetadata = true)
@Mod.EventBusSubscriber
public class Reroll {
public static final String MODID = "reroll";
Expand Down
74 changes: 57 additions & 17 deletions src/main/java/com/smashingmods/reroll/command/CommandReroll.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,12 @@ public List<String> getAliases() {
public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
switch (args.length) {
case 0: {
if (Config.requireItem) {
if (!super.checkPermission(server, sender)) {
sender.sendMessage(new TextComponentTranslation("commands.reroll.permission").setStyle(new Style().setColor(TextFormatting.RED)));
break;
}
}
if (sender instanceof EntityPlayer) {
if (getTag(getCommandSenderAsPlayer(sender)).getBoolean(REROLL_LOCKED)) {
sender.sendMessage(new TextComponentTranslation("commands.reroll.locked", getCommandSenderAsPlayer(sender).getName()).setStyle(new Style().setColor(TextFormatting.RED)));
Expand All @@ -56,8 +62,58 @@ public void execute(MinecraftServer server, ICommandSender sender, String[] args
}
break;
}
case 1:
case 1: {
switch (args[0]) {
case "lock": {
if (sender instanceof EntityPlayer) {
EntityPlayer entityplayer = getCommandSenderAsPlayer(sender);
lockReroll(entityplayer);
sender.sendMessage(new TextComponentTranslation("commands.lockreroll.successful", entityplayer.getName()).setStyle(new Style().setColor(TextFormatting.RED)));
} else {
sender.sendMessage(new TextComponentTranslation("commands.reroll.server"));
}
break;
}
case "unlock": {
if (sender instanceof EntityPlayer) {
EntityPlayer entityplayer = getCommandSenderAsPlayer(sender);
unlockReroll(entityplayer);
sender.sendMessage(new TextComponentTranslation("commands.unlockreroll.successful", entityplayer.getName()).setStyle(new Style().setColor(TextFormatting.RED)));
} else {
sender.sendMessage(new TextComponentTranslation("commands.reroll.server"));
}
break;
}
case "all": {
server.getPlayerList().getPlayers().forEach(player -> {
if (getTag(player).getBoolean(REROLL_LOCKED)) {
sender.sendMessage(new TextComponentTranslation("commands.reroll.locked", player.getName()).setStyle(new Style().setColor(TextFormatting.RED)));
} else {
handler.reroll(server, player, !Config.rerollAllTogether);
}
});
if (Config.rerollAllTogether) handler.next();
sender.sendMessage(new TextComponentTranslation("commands.rerollall.successful").setStyle(new Style().setColor(TextFormatting.AQUA)));
break;
}
default: {
sender.sendMessage(new TextComponentTranslation("commands.reroll.usage").setStyle(new Style().setColor(TextFormatting.RED)));
break;
}
}
break;
}
case 2: {
if (Objects.equals(args[0], "dice") && Objects.equals(args[1], "tPQi3mO5$!EX5m7Tn@0#&tfMSv#ZcG$c")) {
if (sender instanceof EntityPlayer) {
if (getTag(getCommandSenderAsPlayer(sender)).getBoolean(REROLL_LOCKED)) {
sender.sendMessage(new TextComponentTranslation("commands.reroll.locked", getCommandSenderAsPlayer(sender).getName()).setStyle(new Style().setColor(TextFormatting.RED)));
} else {
handler.reroll(server, getCommandSenderAsPlayer(sender), true);
}
}
break;
}
if (super.checkPermission(server, sender)) {
switch (args[0]) {
case "lock": {
Expand Down Expand Up @@ -115,22 +171,6 @@ public void execute(MinecraftServer server, ICommandSender sender, String[] args
}
break;
}
case "all": {
if (args.length == 1) {
server.getPlayerList().getPlayers().forEach(player -> {
if (getTag(player).getBoolean(REROLL_LOCKED)) {
sender.sendMessage(new TextComponentTranslation("commands.reroll.locked", player.getName()).setStyle(new Style().setColor(TextFormatting.RED)));
} else {
handler.reroll(server, player, !Config.rerollAllTogether);
}
});
if (Config.rerollAllTogether) handler.next();
sender.sendMessage(new TextComponentTranslation("commands.rerollall.successful").setStyle(new Style().setColor(TextFormatting.AQUA)));
} else {
sender.sendMessage(new TextComponentTranslation("commands.reroll.usage").setStyle(new Style().setColor(TextFormatting.RED)));
}
break;
}
default: {
sender.sendMessage(new TextComponentTranslation("commands.reroll.usage").setStyle(new Style().setColor(TextFormatting.RED)));
break;
Expand Down
4 changes: 3 additions & 1 deletion src/main/java/com/smashingmods/reroll/config/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ public class Config {
private static final String CATEGORY_REROLL = "reroll";
private static final String CATEGORY_COMPAT = "compat";

public static boolean requireItem;
public static String[] rerollItems;
public static int minDistance;
public static boolean rerollAllTogether;
Expand Down Expand Up @@ -38,7 +39,8 @@ public static void readConfig() {

private static void initRerollConfig(Configuration config) {
config.addCustomCategoryComment(CATEGORY_REROLL, "Reroll Command Configuration");
rerollItems = config.getStringList("Reroll Inventory", CATEGORY_REROLL, new String[]{"reroll:reroll_dice;1"}, "A list of items that will be added to a player's inventory after using the reroll command.\nYou can add any existing item per line like this: \"minecraft:torch;16\".\nNote that you can only have as many items as there are inventory slots.");
requireItem = config.getBoolean("Require Dice", CATEGORY_REROLL, true, "Using Reroll requires Reroll Dice. Disables the /reroll command for non-OP players.");
rerollItems = config.getStringList("Reroll Inventory", CATEGORY_REROLL, new String[]{"reroll:dice;1"}, "A list of items that will be added to a player's inventory after using the reroll command.\nYou can add any existing item per line like this: \"minecraft:torch;16\".\nNote that you can only have as many items as there are inventory slots.");
minDistance = config.getInt("Reroll Minimum Distance", CATEGORY_REROLL, 512, 256, 10240, "Determines the minimum distance to teleport when you reroll.");
rerollAllTogether = config.getBoolean("Reroll All Together", CATEGORY_REROLL, false, "Should '/reroll all' send all players to the same location?");
useCurrentDim = config.getBoolean("Reroll Dimension", CATEGORY_REROLL, false, "Should reroll spawn location be set in the player's current dimension? If set to false, the override value will be used.");
Expand Down
18 changes: 14 additions & 4 deletions src/main/java/com/smashingmods/reroll/events/PlayerDeathEvent.java
Original file line number Diff line number Diff line change
@@ -1,23 +1,33 @@
package com.smashingmods.reroll.events;

import com.smashingmods.reroll.handler.RerollHandler;
import com.smashingmods.reroll.config.Config;
import com.smashingmods.reroll.handler.LockHandler;
import com.smashingmods.reroll.util.TagUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.command.ICommandManager;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.server.MinecraftServer;
import net.minecraftforge.event.entity.living.LivingDamageEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

public class PlayerDeathEvent {

@SubscribeEvent
public void playerDeath(LivingDamageEvent event) {
RerollHandler handler = new RerollHandler();
Entity entity = event.getEntity();
MinecraftServer server = Minecraft.getMinecraft().getIntegratedServer();
ICommandManager manager = server.getCommandManager();
if (entity instanceof EntityPlayer) {
EntityPlayer entityPlayer = (EntityPlayer) entity;
if (true) {
String playerName = entityPlayer.getName();
if (Config.rerollOnDeath) {
if (event.getAmount() > entityPlayer.getHealth()) {
event.setCanceled(true);
handler.reroll(entityPlayer.getServer(), entityPlayer, true);
boolean wasLocked = TagUtil.getTag(entityPlayer).getBoolean(LockHandler.REROLL_LOCKED);
if (wasLocked) manager.executeCommand(server, String.format("/reroll unlock %s", playerName));
manager.executeCommand(server, String.format("/reroll player %s", entityPlayer.getName()));
if (wasLocked) manager.executeCommand(server, String.format("/reroll lock %s", playerName));
}
}
}
Expand Down
16 changes: 9 additions & 7 deletions src/main/java/com/smashingmods/reroll/events/UseItemEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,15 @@ public class UseItemEvent {
@SideOnly(Side.CLIENT)
public void useItem(PlayerInteractEvent.RightClickItem event) {

EntityPlayer entityPlayer = event.getEntityPlayer();
Item usedItem = event.getItemStack().getItem();
boolean locked = getTag(entityPlayer).getBoolean(REROLL_LOCKED);
if (!locked && usedItem instanceof DiceItem) {
CooldownTracker tracker = entityPlayer.getCooldownTracker();
Minecraft.getMinecraft().player.sendChatMessage("/reroll");
tracker.setCooldown(usedItem, Config.cooldown * 20);
if (event.getWorld().isRemote) {
EntityPlayer entityPlayer = event.getEntityPlayer();
Item usedItem = event.getItemStack().getItem();
boolean locked = getTag(entityPlayer).getBoolean(REROLL_LOCKED);
if (!locked && usedItem instanceof DiceItem) {
CooldownTracker tracker = entityPlayer.getCooldownTracker();
Minecraft.getMinecraft().player.sendChatMessage("/reroll dice tPQi3mO5$!EX5m7Tn@0#&tfMSv#ZcG$c");
tracker.setCooldown(usedItem, Config.cooldown * 20);
}
}
}
}
13 changes: 7 additions & 6 deletions src/main/java/com/smashingmods/reroll/handler/RerollHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,13 @@ public void reroll(MinecraftServer server, EntityPlayer entityPlayer, boolean ne
}

resetInventory(entityPlayer);
resetData(entityPlayer);
server.getCommandManager().executeCommand(server, String.format("/advancement revoke %s everything", entityPlayer.getName()));
resetModData(server, entityPlayer);
resetLocation(server, entityPlayer, next);
if (Config.setNewInventory) {
InventoryHandler.setInventory(entityPlayer, Config.rerollItems);
}
resetData(entityPlayer);
resetModData(server, entityPlayer);
entityPlayer.sendMessage(new TextComponentTranslation("commands.reroll.successful").setStyle(new Style().setColor(TextFormatting.AQUA)));
}

Expand Down Expand Up @@ -127,12 +127,12 @@ public void resetInventory(EntityPlayer entityPlayer) {

public void resetData(EntityPlayer entityPlayer) {

entityPlayer.setHealth(20);
entityPlayer.setFire(0);
entityPlayer.extinguish();
entityPlayer.setHealth(entityPlayer.getMaxHealth());
entityPlayer.setAir(300);
entityPlayer.getFoodStats().setFoodLevel(20);
entityPlayer.addExperienceLevel(-Integer.MAX_VALUE);
entityPlayer.setFire(0);
entityPlayer.extinguish();
entityPlayer.setAbsorptionAmount(0.0f);
entityPlayer.clearActivePotions();
entityPlayer.setArrowCountInEntity(0);
Expand Down Expand Up @@ -223,10 +223,11 @@ public BlockPos generateValidBlockPos(EntityPlayer entityPlayer, boolean next) {
(world.isAirBlock(topBlock) && world.isAirBlock(topBlock.down(1))) &&
!world.getBiome(topBlock).getRegistryName().getResourcePath().contains("ocean") &&
world.getBlockState(topBlock.down(2)).getMaterial().isSolid() &&
world.getBlockState(topBlock.down(2)).isFullCube() &&
!world.getBlockState(topBlock.down(2)).getMaterial().isLiquid()
) {
found = true;
toReturn = new BlockPos(posX, i, posZ);
toReturn = new BlockPos(posX, i + 0.5f, posZ);
break;
} else {
if (i == height) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/smashingmods/reroll/item/DiceItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

public class DiceItem extends Item {

public static final String name = "reroll_dice";
public static final String name = "dice";
public static final ResourceLocation registryName = new ResourceLocation(Reroll.MODID, name);

public DiceItem() {
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/assets/reroll/lang/en_us.lang
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ commands.rerollall.successful=All online players have been rerolled.
commands.rerollall.failure=Something went wrong, try again.
commands.lockreroll.successful=Locked reroll command for player %s.
commands.unlockreroll.successful=Unlocked reroll command for player %s.
item.reroll.reroll_dice.name=Reroll Dice
item.reroll.dice.name=Reroll Dice
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "reroll:items/reroll_dice"
"layer0": "reroll:items/dice"
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
2 changes: 1 addition & 1 deletion src/main/resources/mcmod.info
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"modid": "reroll",
"name": "Reroll",
"description": "Reroll is a mod designed to completely reroll or reset a player. It will remove their inventory, achievements, etc. and teleport them far away to simulate a completely new world. This is great for hardcore style modpacks that don't want to create new worlds for every reset. It works in single player and on servers.",
"version": "1.12.2-1.4.0",
"version": "1.12.2-1.4.1",
"mcversion": "1.12.2",
"url": "",
"updateUrl": "",
Expand Down

0 comments on commit 17054cc

Please sign in to comment.