Skip to content
This repository was archived by the owner on Aug 4, 2021. It is now read-only.

Commit

Permalink
remove thrown option
Browse files Browse the repository at this point in the history
  • Loading branch information
deirn committed Aug 25, 2020
1 parent 3e92383 commit 74f1ad9
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 67 deletions.
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,12 @@ For common tags used by various mods, see [tutorial:tags](https://fabricmc.net/w
// this is not valid config since JSON doesn't support comments!
{
// the key is item tags.
// this is a shorthand of nbt=false and thrown=false
// this is a shorthand of nbt=false
"c:copper_ingots": "techreborn:copper_ingot",

"c:steel_ingots": {
"target": "techreborn:steel_ingot",
"nbt" : true, // [optional] allow converting items with nbt. nbt will be copied.
"thrown": true // [optional] convert items thrown by player.
}
}
```
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ yarn = 1.16.2+build.21
loader = 0.9.2+build.206

# Mod Properties
mod = 1.0
mod = 1.1
group = com.github.badasintended
archiveBaseName = monopoly

Expand Down
30 changes: 30 additions & 0 deletions src/main/java/badasintended/monopoly/Monopoly.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,13 @@
import com.google.gson.reflect.TypeToken;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.tag.Tag;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import net.minecraft.world.World;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

Expand Down Expand Up @@ -63,6 +69,30 @@ public Map<Identifier, UnifyConfig> getConfig() {
return config;
}

public ItemStack unify(World world, ItemStack from) {
if (world.isClient || from.isEmpty()) return from;
for (Map.Entry<Identifier, UnifyConfig> entry : getConfig().entrySet()) {
Tag<Item> tag = world.getTagManager().getItems().getTag(entry.getKey());
if (tag == null) continue;
if (tag.contains(from.getItem())) {
UnifyConfig unifyConfig = entry.getValue();
if (unifyConfig == null) continue;

if (!unifyConfig.isNbt() && from.getTag() != null) continue;

Item item = Registry.ITEM.get(unifyConfig.getTarget());
if (item == Items.AIR) continue;

ItemStack unified = new ItemStack(item, from.getCount());

unified.setTag(from.getTag());

return unified;
}
}
return from;
}

private void reset() {
try {
Files.write(CONFIG_PATH, gson.toJson(config).getBytes());
Expand Down
14 changes: 1 addition & 13 deletions src/main/java/badasintended/monopoly/UnifyConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ public class UnifyConfig {

private boolean nbt = false;

private boolean thrown = false;

public Identifier getTarget() {
return target;
}
Expand All @@ -21,10 +19,6 @@ public boolean isNbt() {
return nbt;
}

public boolean isThrown() {
return thrown;
}

public void setTarget(Identifier target) {
this.target = target;
}
Expand All @@ -33,10 +27,6 @@ public void setNbt(boolean nbt) {
this.nbt = nbt;
}

public void setThrown(boolean thrown) {
this.thrown = thrown;
}

public static class Serializer implements JsonSerializer<UnifyConfig>, JsonDeserializer<UnifyConfig> {

public Serializer() {
Expand All @@ -52,20 +42,18 @@ public UnifyConfig deserialize(JsonElement json, Type typeOfT, JsonDeserializati
JsonObject object = json.getAsJsonObject();
unifyConfig.setTarget(new Identifier(object.get("target").getAsString()));
if (object.has("nbt")) unifyConfig.setNbt(object.get("nbt").getAsBoolean());
if (object.has("thrown")) unifyConfig.setThrown(object.get("thrown").getAsBoolean());
}

return unifyConfig;
}

@Override
public JsonElement serialize(UnifyConfig src, Type typeOfSrc, JsonSerializationContext context) {
if (!src.nbt && !src.thrown) return new JsonPrimitive(src.target.toString());
if (!src.nbt) return new JsonPrimitive(src.target.toString());

JsonObject object = new JsonObject();
object.addProperty("target", src.target.toString());
if (src.nbt) object.addProperty("nbt", true);
if (src.thrown) object.addProperty("thrown", true);

return object;
}
Expand Down
55 changes: 4 additions & 51 deletions src/main/java/badasintended/monopoly/mixin/ItemEntityMixin.java
Original file line number Diff line number Diff line change
@@ -1,65 +1,18 @@
package badasintended.monopoly.mixin;

import badasintended.monopoly.Monopoly;
import badasintended.monopoly.UnifyConfig;
import net.minecraft.entity.ItemEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.tag.Tag;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.util.Map;
import java.util.UUID;
import org.spongepowered.asm.mixin.injection.ModifyVariable;

@Mixin(ItemEntity.class)
public abstract class ItemEntityMixin extends EntityMixin {

@Shadow
public abstract UUID getThrower();

@Shadow
public abstract ItemStack getStack();

@Shadow
public abstract void setStack(ItemStack stack);

@Unique
private boolean monopoly$already = false;

@Inject(method = "tick", at = @At("TAIL"))
private void unifyStack(CallbackInfo ci) {
if (!world.isClient && !monopoly$already) {
monopoly$already = true;
ItemStack stack = getStack();
for (Map.Entry<Identifier, UnifyConfig> entry : Monopoly.getInstance().getConfig().entrySet()) {
Tag<Item> tag = world.getTagManager().getItems().getTag(entry.getKey());
if (tag == null) continue;
if (tag.contains(stack.getItem())) {
UnifyConfig unifyConfig = entry.getValue();
if (unifyConfig == null) continue;

if (!unifyConfig.isThrown() && getThrower() != null) continue;
if (!unifyConfig.isNbt() && stack.getTag() != null) continue;

Item item = Registry.ITEM.get(unifyConfig.getTarget());
if (item == Items.AIR) continue;

ItemStack unified = new ItemStack(item, stack.getCount());

unified.setTag(stack.getTag());

setStack(unified);
}
}
}
@ModifyVariable(method = "setStack", at = @At("HEAD"), argsOnly = true)
private ItemStack unifyStack(ItemStack from) {
return Monopoly.getInstance().unify(world, from);
}

}

0 comments on commit 74f1ad9

Please sign in to comment.