Skip to content
This repository was archived by the owner on Jan 3, 2020. It is now read-only.

Commit 997cbda

Browse files
committed
second runnable version
1 parent 377bb1e commit 997cbda

File tree

1 file changed

+93
-56
lines changed

1 file changed

+93
-56
lines changed

src/main/java/org/devinprogress/autoharvest/AutoHarvest.java

Lines changed: 93 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,57 @@
99
import cpw.mods.fml.common.gameevent.InputEvent;
1010
import cpw.mods.fml.common.gameevent.TickEvent;
1111
import cpw.mods.fml.relauncher.Side;
12-
import ibxm.Player;
1312
import net.minecraft.block.*;
1413
import net.minecraft.block.material.Material;
14+
import net.minecraft.client.multiplayer.PlayerControllerMP;
1515
import net.minecraft.client.settings.KeyBinding;
1616
import net.minecraft.entity.player.EntityPlayer;
17-
import net.minecraft.item.ItemSeeds;
17+
import net.minecraft.init.Items;
18+
import net.minecraft.item.Item;
1819
import net.minecraft.item.ItemStack;
1920
import net.minecraft.util.ChatComponentText;
20-
import net.minecraft.util.ChunkCoordinates;
2121
import net.minecraft.util.Vec3;
2222
import net.minecraft.world.World;
2323
import net.minecraftforge.common.MinecraftForge;
24-
import net.minecraftforge.event.entity.player.PlayerEvent;
2524
import org.lwjgl.input.Keyboard;
2625

26+
import java.util.*;
27+
2728
/**
2829
* Created by recursiveg on 14-9-28.
2930
*/
3031

31-
@Mod(modid="autoharvest", name="Auto Harvest", version="0.1-dev")
32+
@Mod(modid="autoharvest", name="Auto Harvest Mod", version="0.1-dev")
3233
public class AutoHarvest {
3334
private boolean enabled=false;
3435
private boolean harvestTick=true;
35-
private KeyBinding toggleKey=new KeyBinding("Toggle Status", Keyboard.KEY_H,"Auto Harvest Mod");
36-
private static int[] delta={-1,0,1};
36+
private KeyBinding toggleKey=new KeyBinding("Toggle Enabled/Disabled", Keyboard.KEY_H,"Auto Harvest Mod");
37+
private static int harvestRange=1;
38+
private static PlayerControllerMP controller=null;
39+
private static final Set<Integer> grassBlockIds =new HashSet<Integer>(Arrays.asList(new Integer[]{
40+
6,31,32,37,38,39,40,175
41+
}));
42+
private static final Set<Item> plantableItems=new HashSet<Item>(){{
43+
add(Items.wheat_seeds);
44+
add(Items.carrot);
45+
add(Items.potato);
46+
add(Items.poisonous_potato);
47+
add(Items.melon_seeds);
48+
add(Items.pumpkin_seeds);
49+
}};
50+
private static final Map<Class<?>,Item> harvestMap=new HashMap<Class<?>,Item>(){{
51+
put(BlockCrops.class,Items.wheat_seeds);
52+
put(BlockCarrot.class,Items.carrot);
53+
put(BlockPotato.class,Items.potato);
54+
put(BlockNetherWart.class,Items.nether_wart);
55+
}};
56+
private static final Map<Class<?>,Integer> cropMatureData=new HashMap<Class<?>, Integer>(){{
57+
put(BlockCrops.class,7);
58+
put(BlockCarrot.class,7);
59+
put(BlockPotato.class,7);
60+
put(BlockNetherWart.class,3);
61+
}};
62+
3763

3864
@Mod.EventHandler
3965
public void load(FMLInitializationEvent event) {
@@ -42,91 +68,102 @@ public void load(FMLInitializationEvent event) {
4268
FMLCommonHandler.instance().bus().register(this);
4369
}
4470

71+
private void sendPlayerPrivateMsg(String str){
72+
FMLClientHandler.instance().getClient().thePlayer.addChatMessage(new ChatComponentText(str));
73+
}
4574
@SubscribeEvent
4675
public void onToggle(InputEvent.KeyInputEvent e){
4776
if(toggleKey.isPressed()){
48-
//off->harvest->plant
49-
/*if(!enabled){
50-
enabled=true;
51-
harvestTick=true;
52-
FMLClientHandler.instance().getClient().thePlayer.addChatMessage(new ChatComponentText("[Auto Harvest] Current Mode: Harvest"));
53-
}else if(enabled&&harvestTick){
54-
harvestTick=false;
55-
FMLClientHandler.instance().getClient().thePlayer.addChatMessage(new ChatComponentText("[Auto Harvest] Current Mode: Plant"));
56-
}else{
57-
enabled=false;
58-
FMLClientHandler.instance().getClient().thePlayer.addChatMessage(new ChatComponentText("[Auto Harvest] Current Mode: OFF"));
59-
}*/
6077
if(!enabled){
6178
enabled=true;
62-
FMLClientHandler.instance().getClient().thePlayer.addChatMessage(new ChatComponentText("[Auto Harvest] Current Mode: ON"));
79+
controller=FMLClientHandler.instance().getClient().playerController;
80+
sendPlayerPrivateMsg("[Auto Harvest] Enabled");
6381
}else{
6482
enabled=false;
65-
FMLClientHandler.instance().getClient().thePlayer.addChatMessage(new ChatComponentText("[Auto Harvest] Current Mode: OFF"));
83+
sendPlayerPrivateMsg("[Auto Harvest] Disabled");
6684
}
6785
}
6886
}
6987

7088
@SubscribeEvent
71-
public void onTick(TickEvent.PlayerTickEvent e){
89+
public void onInGameTick(TickEvent.PlayerTickEvent e){//one block a tick
7290
if(enabled && e.side==Side.CLIENT && e.player!=null){
73-
harvestTick=!harvestTick;
74-
if(harvestTick)
75-
doHarvest(e.player);
76-
else
77-
doPlant(e.player);
91+
if(e.player.inventory.getCurrentItem()==null){
92+
doClearGrass(e.player);
93+
}else{
94+
if(harvestTick)
95+
doHarvest(e.player);
96+
else
97+
doPlant(e.player);
98+
harvestTick=!harvestTick;
99+
}
78100
}
79101
}
80102

103+
private void doClearGrass(EntityPlayer p){
104+
World w=p.worldObj;
105+
int X=(int)Math.floor(p.posX);
106+
int Y=(int)Math.floor(p.posY-1.61);//the "leg block"
107+
int Z=(int)Math.floor(p.posZ);
108+
for(int deltaY=-1;deltaY<=1;++deltaY)
109+
for(int deltaX=-2;deltaX<=2;++deltaX)
110+
for(int deltaZ=-2;deltaZ<=2;++deltaZ)
111+
if(canClearGrass(w,X + deltaX, Y+deltaY, Z + deltaZ)){
112+
controller.onPlayerDamageBlock(X + deltaX, Y+deltaY, Z + deltaZ, 1);
113+
return;
114+
}
115+
}
116+
81117
private void doHarvest(EntityPlayer p){
82118
World w=p.worldObj;
83119
int X=(int)Math.floor(p.posX);
84-
int Y=(int)Math.floor(p.posY-1.61);
120+
int Y=(int)Math.floor(p.posY-1.61);//the "leg block"
85121
int Z=(int)Math.floor(p.posZ);
86-
for(int deltaX:delta)
87-
for(int deltaZ:delta){
88-
if(canHarvest(w,X+deltaX,Y,Z+deltaZ)) {
89-
FMLClientHandler.instance().getClient().playerController.onPlayerDamageBlock(X + deltaX, Y, Z + deltaZ, 1);
122+
for(int deltaX=-harvestRange;deltaX<=harvestRange;++deltaX)
123+
for(int deltaZ=-harvestRange;deltaZ<=harvestRange;++deltaZ){
124+
if(canHarvest(w,p,X+deltaX,Y,Z+deltaZ)) {
125+
controller.onPlayerDamageBlock(X + deltaX, Y, Z + deltaZ, 1);
90126
return;
91127
}
92128
}
93129
}
94130

95-
private boolean canHarvest(World w,int X,int Y,int Z){
96-
return (w.getBlock(X,Y,Z)instanceof BlockCrops&&w.getBlockMetadata(X,Y,Z)==7);
97-
}
98-
99131
private void doPlant(EntityPlayer p){
100132
World w=p.worldObj;
101133
int X=(int)Math.floor(p.posX);
102-
int Y=(int)Math.floor(p.posY-1.61);
134+
int Y=(int)Math.floor(p.posY-2.61);//Block player stand on;
103135
int Z=(int)Math.floor(p.posZ);
104-
105-
Y=Y-1;
106-
for(int deltaX:delta)
107-
for(int deltaZ:delta){
108-
if(canPlantOn(w, X + deltaX, Y, Z + deltaZ)) {
109-
ItemStack seed=selectSeed(p);
110-
if(seed!=null)
111-
FMLClientHandler.instance().getClient().playerController.onPlayerRightClick(p,w,seed,X + deltaX, Y, Z + deltaZ,1,
136+
for(int deltaX=-harvestRange;deltaX<=harvestRange;++deltaX)
137+
for(int deltaZ=-harvestRange;deltaZ<=harvestRange;++deltaZ){
138+
if(canPlantOn(w, p,X + deltaX, Y, Z + deltaZ)) {
139+
ItemStack seed=FMLClientHandler.instance().getClient().thePlayer.inventory.getCurrentItem();
140+
controller.onPlayerRightClick(p,w,seed,X + deltaX, Y, Z + deltaZ,1,
112141
Vec3.createVectorHelper(X + deltaX+0.5, Y+1, Z + deltaZ+0.5));
113-
else{
114-
//System.out.println("seed==null");
115-
}
116142
return;
117143
}
118144
}
119145
}
120146

121-
private boolean canPlantOn(World w,int X,int Y,int Z){
122-
return (w.getBlock(X,Y,Z) instanceof BlockFarmland)&&(w.getBlock(X,Y+1,Z)instanceof BlockAir);
147+
private boolean canClearGrass(World w,int X,int Y,int Z){
148+
return grassBlockIds.contains(Block.getIdFromBlock(w.getBlock(X, Y, Z)));
149+
}
150+
151+
private boolean canHarvest(World w,EntityPlayer p,int X,int Y,int Z){
152+
Class<?> c=w.getBlock(X, Y, Z).getClass();
153+
return harvestMap.containsKey(c)&&harvestMap.get(c)==p.inventory.getCurrentItem().getItem()&&CropGrown(w,X,Y,Z,c);
154+
}
155+
156+
private boolean CropGrown(World w,int X,int Y,int Z,Class<?> cropClass){
157+
int meta=w.getBlockMetadata(X,Y,Z);
158+
return cropMatureData.get(cropClass)==meta;
123159
}
124160

125-
private ItemStack selectSeed(EntityPlayer p){
126-
if(p==null||p.inventory==null||p.inventory.getCurrentItem()==null)return null;
127-
if(p.inventory.getCurrentItem().getItem() instanceof ItemSeeds)
128-
return p.inventory.getCurrentItem();
129-
else
130-
return null;
161+
private boolean canPlantOn(World w,EntityPlayer p,int X,int Y,int Z){
162+
Item i=p.inventory.getCurrentItem().getItem();
163+
boolean haveSpace=w.getBlock(X,Y+1,Z)instanceof BlockAir;
164+
boolean isFarm=w.getBlock(X,Y,Z) instanceof BlockFarmland;
165+
boolean CropOnFarm=plantableItems.contains(i);
166+
boolean nether_wart=(w.getBlock(X,Y,Z) instanceof BlockSoulSand)&&(i==Items.nether_wart);
167+
return haveSpace&&(nether_wart||(isFarm&&CropOnFarm));
131168
}
132169
}

0 commit comments

Comments
 (0)