Changed how overrides are done so they break fewer things

This commit is contained in:
Sollace 2020-04-25 23:22:43 +02:00
parent 17e036a49c
commit dcf41398a1
8 changed files with 63 additions and 17 deletions

View file

@ -14,6 +14,7 @@ import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
@ -25,7 +26,7 @@ public final class TreeType {
public static final TreeType OAK = new TreeType("oak", new Weighted<Supplier<ItemStack>>()
.put(1, () -> new ItemStack(UItems.ROTTEN_APPLE))
.put(2, () -> new ItemStack(UItems.GREEN_APPLE))
.put(3, () -> new ItemStack(UItems.VanillaOverrides.APPLE)), Blocks.OAK_LOG, Blocks.OAK_LEAVES);
.put(3, () -> new ItemStack(Items.APPLE)), Blocks.OAK_LOG, Blocks.OAK_LEAVES);
public static final TreeType BIRCH = new TreeType("birch", new Weighted<Supplier<ItemStack>>()
.put(1, () -> new ItemStack(UItems.ROTTEN_APPLE))
.put(2, () -> new ItemStack(UItems.SWEET_APPLE))

View file

@ -27,7 +27,7 @@ public class AppleItem extends Item implements ItemEntityCapabilities.TickableIt
public ActionResult onGroundTick(IItemEntity item) {
ItemEntity entity = item.get().getOwner();
if (!entity.removed && item.getAge() > item.getPickupDelay()) {
if (!entity.removed && item.getPickupDelay() == 0 && item.getAge() > 200230 && entity.world.random.nextInt(200) < 10) {
if (!entity.world.isClient) {
entity.remove();

View file

@ -22,7 +22,7 @@ public class ExtendedShearsItem extends ShearsItem {
public ExtendedShearsItem(Settings settings) {
super(settings);
final Optional<DispenserBehavior> vanillaDispenserBehaviour = Dispensable.getBehavior(new ItemStack(Items.SHEARS));
DispenserBlock.registerBehavior(Items.SHEARS, Dispensable.setDispenseable(this, (source, stack) -> {
/*DispenserBlock.registerBehavior(Items.SHEARS,*/ Dispensable.setDispenseable(this, (source, stack) -> {
BlockPos pos = source.getBlockPos().offset(source.getBlockState().get(DispenserBlock.FACING));
World w = source.getWorld();
@ -38,7 +38,7 @@ public class ExtendedShearsItem extends ShearsItem {
return TypedActionResult.pass(action.dispense(source, stack));
})
.orElseGet(() -> TypedActionResult.fail(stack));
}));
})/*)*/;
}
@Override

View file

@ -163,6 +163,9 @@ public interface UItems {
Item BUTTERFLY_SPAWN_EGG = register(new SpawnEggItem(UEntities.BUTTERFLY, 0x222200, 0xaaeeff, new Settings().group(ItemGroup.MISC)), "butterfly_spawn_egg");
static <T extends Item> T register(T item, String name) {
if (item instanceof BlockItem) {
((BlockItem)item).appendBlocks(Item.BLOCK_ITEMS, item);
}
return Registry.ITEM.add(new Identifier("unicopia", name), item);
}
@ -181,15 +184,4 @@ public interface UItems {
Toxics.bootstrap();
}
interface VanillaOverrides {
StickItem STICK = register(new StickItem(new Item.Settings().group(ItemGroup.MATERIALS)), Items.STICK);
ExtendedShearsItem SHEARS = register(new ExtendedShearsItem(new Item.Settings().maxDamage(238).group(ItemGroup.TOOLS)), Items.SHEARS);
AppleItem APPLE = register(new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE)), Items.APPLE);
static <T extends Item> T register(T newItem, Item oldItem) {
return Registry.ITEM.set(Registry.ITEM.getRawId(oldItem), Registry.ITEM.getId(oldItem), newItem);
}
}
}

View file

@ -0,0 +1,23 @@
package com.minelittlepony.unicopia.item;
import net.minecraft.item.FoodComponents;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import net.minecraft.util.registry.SimpleRegistry;
public final class VanillaOverrides {
public static final Registry<Item> REGISTRY = new SimpleRegistry<>();
private static <T extends Item> T register(String name, T newItem) {
return Registry.register(REGISTRY, new Identifier(name), newItem);
}
static {
register("stick", new StickItem(new Item.Settings().group(ItemGroup.MATERIALS)));
register("shears", new ExtendedShearsItem(new Item.Settings().maxDamage(238).group(ItemGroup.TOOLS)));
register("apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE)));
}
}

View file

@ -34,7 +34,7 @@ import net.minecraft.world.World;
public class ZapAppleItem extends AppleItem {
private static final List<Item> ALIASABLE_ITEMS = Lists.newArrayList(
UItems.VanillaOverrides.APPLE,
Items.APPLE,
UItems.GREEN_APPLE,
UItems.SWEET_APPLE,
UItems.SOUR_APPLE,
@ -96,7 +96,11 @@ public class ZapAppleItem extends AppleItem {
public void appendStacks(ItemGroup tab, DefaultedList<ItemStack> items) {
super.appendStacks(tab, items);
if (isIn(tab)) {
ALIASABLE_ITEMS.forEach(item -> items.add(new ItemStack(item)));
ALIASABLE_ITEMS.forEach(item -> {
ItemStack stack = new ItemStack(this);
stack.getOrCreateTag().putString("appearance", Registry.ITEM.getId(item).toString());
items.add(stack);
});
}
}

View file

@ -0,0 +1,25 @@
package com.minelittlepony.unicopia.mixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import com.minelittlepony.unicopia.item.VanillaOverrides;
import net.minecraft.item.Item;
import net.minecraft.item.Items;
import net.minecraft.util.Identifier;
@Mixin(Items.class)
abstract class MixinItems {
@ModifyVariable(method = "register(Lnet/minecraft/util/Identifier;Lnet/minecraft/item/Item;)Lnet/minecraft/item/Item;",
at = @At("HEAD"),
index = 1,
argsOnly = true)
private static Item modifyItem(Item item, Identifier id, Item itemAlso) {
if (VanillaOverrides.REGISTRY.containsId(id)) {
return VanillaOverrides.REGISTRY.get(id);
}
return item;
}
}

View file

@ -10,6 +10,7 @@
"MixinFarmlandBlock",
"MixinHoeItem",
"MixinItem",
"MixinItems",
"MixinItemEntity",
"MixinLivingEntity",
"MixinPlayerEntity",